java反射的學習總結

 java reflect概念理解

看了網上很多材料,以及官方文檔,真心覺得,很多時候需要自己消化理解了才行,別人的很多概念,並不好用,甚至有說錯的。。

現總結如下:

1、jvm有個運行數據區,其中又劃分爲:方法區、堆區和棧區;跟java反射有關的是方法區。

2、容易誤解的點:反射的實現,依靠的是個“類的鏡子對象”(自個定義的囧),這樣好理解些,官方定義是:類對象。。真是看吐了,那跟普通對象又有啥區別。還有些說這個“類的鏡子對象”是一定要有創建類的普通對象的時候纔會出現,真是扯淡。。

比如這樣一串代碼:Object o = new Object ();

首先運行程序時,扔給了jvm自動將程序跑起來,編輯階段:代碼會編譯一個.class文件,然後再被類加載器將Object o加載進了內存中;內存方法區得知了一個叫Object的類,於是,就開始創建了一個“Object的鏡子對象”,注意它並不是由new Object()創建出來的對象,後續反射通過java.lang.Class來動態捕獲。


3、接下來理解就簡單了,用法雖然很多,但是基本差不多。

無非是能對JVM運行程序期間,通過自主創建三類(Construction、Field、Method)對象實例,去讀取並管理所有的類的所有信息:類、構造方法、屬性和方法,以及方法、屬性上的註解、泛型(某些情況下才行),且能動態創建對象。


4、反射的作用:

當我們的程序在運行時,需要動態的加載一些類這些類可能之前用不到所以不用加載到jvm,而是在運行時根據需要才加載,這樣的好處對於服務器來說不言而喻,可以網上搜搜,這裏不多做解釋,也是Spring的基礎。

來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章