亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java反射是怎么實現的

發布時間:2020-06-29 11:43:56 來源:億速云 閱讀:288 作者:Leah 欄目:編程語言

java反射是怎么實現的?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

反射是啥?

反射既然有“反”,就說明它是一個逆向的過程。那我們先來看看正向過程是怎樣的。

設計一個類,類實例化成對象,對象調方法或屬性去實現一些功能。

java反射是怎么實現的

那反射是什么呢?

java反射是怎么實現的

不知道大家是否還記得上圖,這是剛接觸java時學到的知識。我自己的理解是現在是知道1,反推到2,然后再通過2得到一些別的信息。(這只是我的推測,至于具體是不是,還需日后深究)

類比到現實中的場景是:

你:媽媽,你知道剪刀在哪嗎?
媽媽:我那天放針線的時候好像在針線盒里看到了,你去找找有沒有。針線盒在客廳的茶幾上。
你:好的。

然后你從“針線”推導出了“針線盒”,再從“針線盒”中找到了“剪刀”。

java反射是怎么實現的

我們的反射就是:從類或對象中推導出Class類,然后再從Class類中獲得類的信息。

更迷糊了?不急,請往下看。

找到針線盒——獲取Class類

先開始說Class類是什么?

Class類就是People類的類,就像People類是p的類一樣。Class類是p的“爺爺”。

java反射是怎么實現的

我們可以這樣理解:java.lang.Class的實例對象是People,People的實例對象是p。我們的思路就是通過People類或p對象獲得Class類,然后再通過Class類獲取People類的信息,比如屬性,方法,構造函數等等。

知道了Class類是什么,那我們說說怎么才能獲取它。

找到Class類有3種方法:

java反射是怎么實現的

值得一提的是,c1、c2、c3叫做People類的“類類型”。好了,現在我們總結一下已知條件:

People:類

p:對象

c:類類型

找到剪刀——獲取People類的信息

應用一:獲取類的全部方法

java反射是怎么實現的

在獲取People類的方法中,ms是一個存放著People類方法的數組,通過循環,一層層獲取它的名稱、參數類型、返回值。

最后直接在main函數中調用即可

java反射是怎么實現的

得到的部分結果如下:

java反射是怎么實現的

應用二:獲取類的全部屬性

java反射是怎么實現的

調用和調用方法類似:

java反射是怎么實現的

運行結果:

java反射是怎么實現的

應用三:獲取類的構造函數

構造函數類似,不再贅述。

java反射是怎么實現的

應用四:獲取類的某個特定方法

java反射是怎么實現的

運行結果如下,兩種調用方式結果相同:

java反射是怎么實現的

以上只是對個別功能的列舉,更具體的可以去API文檔中尋找:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

java反射是怎么實現的

反射的概念

在文章的最后,我們總結一下反射的概念,讓思想升華一下。

反射的定義是什么?

JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法,這種動態獲取、調用對象方法的功能稱為java語言的反射機制。

反射存在的必要性?

“反射機制是很多java框架的基石”。

(1)在xml文件或者properties里面寫好了配置,然后在Java類里面解析xml或properties里面的內容,得到一個字符串,然后用反射機制,根據這個字符串獲得某個類的Class實例,這樣就可以動態配置一些東西,不用每一次都要在代碼里面去new或者做其他的事情,以后要改的話直接改配置文件,代碼維護起來就很方便了。

(2)有時候要適應某些需求,Java類里面不一定能直接調用另外的方法,這時候也可以通過反射機制來實現。

反射的缺點?

我們在代碼中也能看到,反射的代碼比正常調用的代碼更多,性能也慢,所以應避免使用反射。這就相當于如果你本來就知道剪刀在哪,就沒必要再通過針線——針線盒——剪刀這條路了。

是否使用反射的標準是啥?

如果一個功能可以不用反射完成,那么最好就不用。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

呼和浩特市| 上高县| 富宁县| 阳高县| 沛县| 常山县| 赣州市| 涡阳县| 衡东县| 汝阳县| 深州市| 金沙县| 光山县| 肃北| 临邑县| 大丰市| 大邑县| 永吉县| 宁南县| 迁西县| 高碑店市| 儋州市| 宜兰县| 宁海县| 宁都县| 泰和县| 磐安县| 盘山县| 富裕县| 建昌县| 维西| 大城县| 六枝特区| 新田县| 文登市| 辽阳市| 扎兰屯市| 收藏| 沐川县| 滦南县| 临清市|