首頁 > Java > Java入門 > 主體

什麼是java反射

爱喝马黛茶的安东尼
發布: 2019-11-12 09:55:29
原創
3101 人瀏覽過

什麼是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類別裡面不一定能直接呼叫另外的方法,這時候也可以透過反射機制來實現。

反射的缺點?

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

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

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

php中文網,大量的免費Java入門教學,歡迎線上學習!

以上是什麼是java反射的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板