Java中為什麼需要反射?反射要解決什麼問題?

來源:互聯網
上載者:User

標籤:構造   應用   html   load   array類   建立   project   classes   一句話   

一句話概括就是使用反射可以賦予jvm動態編譯的能力,否則類的中繼資料資訊只能用靜態編譯的方式實現,例如熱載入,Tomcat的classloader等等都沒法支援

 

Java中編譯類型有兩種:

  • 靜態編譯:在編譯時間確定類型,綁定對象即通過。
  • 動態編譯:運行時確定類型,綁定對象。動態編譯最大限度地發揮了Java的靈活性,體現了多態的應用,可以減低類之間的耦合性。

Java反射是Java被視為動態(或准動態)語言的一個關鍵性質。這個機制允許程式在運行時透過Reflection APIs取得任何一個已知名稱的class的內部資訊,包括其modifiers(諸如public、static等)、superclass(例如Object)、實現之interfaces(例如Cloneable),也包括fields和methods的所有資訊,並可於運行時改變fields內容或喚起methods。

Reflection可以在運行時載入、探知、使用編譯期間完全未知的classes。即Java程式可以載入一個運行時才得知名稱的class,擷取其完整構造,並產生其對象實體、或對其fields設值、或喚起其methods。

反射(reflection)允許靜態語言在運行時(runtime)檢查、修改程式的結構與行為。
在靜態語言中,使用一個變數時,必須知道它的類型。在Java中,變數的類型資訊在編譯時間都儲存到了class檔案中,這樣在運行時才能保證準確無誤;換句話說,程式在運行時的行為都是固定的。如果想在運行時改變,就需要反射這東西了。

實現Java反射機制的類都位於java.lang.reflect包中:

1、Class類:代表一個類

2、Field類:代表類的成員變數(類的屬性)

3、Method類:代表類的方法

4、Constructor類:代表類的構造方法

5、Array類:提供了動態建立數組,以及訪問數組的元素的靜態方法

 

* 對於修改靜態常量類型是需要小心

對於基本類型的靜態常量,JAVA在編譯的時候就會把代碼中對此常量中引用的地方替換成相應常量值


* 參考閱讀
http://www.imooc.com/learn/199
74202467
http://wiki.jikexueyuan.com/project/java-reflection/jave-guide.html

Java中為什麼需要反射?反射要解決什麼問題?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.