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、反射的作用:
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。