如何理解java中的反射?

野生大表哥


JAVA中的反射無處不在,不僅在jdk中存在,還在諸如spring,mybatis,設計模式等中廣泛使用!

首先要知道的是,JAVA可以算做編譯型語言,大多數的類,方法都在編譯時已經明確,這顯然不能滿足於我們所有的需求,使用反射就可以在運行時動態加載,通過類可以構造對象,準確的知道它的屬性,方法等全部信息!



JAVA中的反射方式有以下幾種:

①Class.forName(“類全路徑”);

②對象名.getClass

③基本類型的包裝類:Boolean.TYPE,Integer.TYPE等!

反射的作用有:

1,可以在運行時動態獲得對象,

2,在運行時動態獲取一個類的構造器,方法,變量,註解等!

3,實現動態代理。

反射的缺點:因為是在運行時獲取,沒有JAVA的預編譯,在運行時性能存在問題!


反射的實際使用場景:

1,spring中實例化對象的時候如果都用new來創建對象,那將會十分繁瑣,而且加入新類型的時候也需要重新new,spring的做法是讓這些所有對象繼承自beanDefinition,這樣在實例化的時候,只要傳入父類和子類類型即可!

2,動態代理:spring aop中的註釋模式就是用了動態代理,比如JdkDynamicAopProxy

反射在實際開發中也是體現一個開發人員水平高低的參考,要讓這種思想深深烙入心裡,在實際開發中解決很多後期擴展困難的問題!需要反射Demo的可以私信我索取,近期一直在分享JAVA開發方面的東西,有些很不錯,敬請關注。。


哎喲JAVA不錯哦


反射就是在運行期獲取類型信息,Java反射更進一步,還允許修改一些信息。至於如何實現的,是在編譯期間將相關信息(類型元數據)放在class文件中,在運行時候可以將這些信息封裝成特定Java對象供系統使用。其實C++和Delphi等語言都可以提供(但程度稍低)RTTI信息供運行時使用,但是以函數形式提供。

因為編譯器在編譯期知道所有的類型細節信息,所以,只要需要,任何語言都可以提供反射功能。


網絡老鼠Sunny


反射就是為了程序運行中的時候通過反射獲取類的方法和屬性,可以進行修改,現在大眾都知道的spring框架裡面的IOC就是應用了反射創建類,當業務需要的時候可以直接注入,不需要自己去創建


海碼創優


那一面鏡子,你能看到你自己的臉。你做表情如笑,嘟嘴賣萌都能實時映射到鏡子中,這就是反射。程序中也是一樣,運行時實時加載類的屬性和方法。


null123827509


通過反射可以獲得類的相關信息,比如屬性,方法,通過反射對象之間共同屬性的賦值!


桑海田


一個類有:成員變量、方法、構造方法、包等等信息,利用反射技術可以對一個類進行解剖,把個個組成部分映射成一個個對象。


Java架構師日記


通俗的講就是反射可以在運行時根據指定的類名獲得類的信息。


分享到:


相關文章: