反射

反射:


object a = new object();

這段代碼運行了起來,首先JVM會啟動,你的代碼會編譯成一個.class文件。然后被類加載器加載到JVM的內(nèi)存中,你的類object加載到方法區(qū)中,創(chuàng)建了object類的class對象到堆中,每個類只有一個class對象,加載好后為你的對象分配內(nèi)存,初始化也就是new object();反射就是在我們程序運行時需要動態(tài)的加載一些類,這些類可能之前用不到所以不用加載到j(luò)vm而是在運行時需要才加載

?jvm編譯的.class文件里面包含了當(dāng)前字節(jié)碼文件里面的所有內(nèi)容只要我們獲取到這個class對象 就可以對其為所欲為!!!

? 這個class對象中包含了對應(yīng)字節(jié)碼文件的所有成員變量 (Field) ? 所有成員方法(Method)? 構(gòu)造方法(Constructor)

?二,反射機(jī)制的作用:

1,反編譯:.class-->.java

在運行時判斷任意一個對象所屬的類。

在運行時構(gòu)造任意一個類的對象。

在運行時判斷任意一個類所具有的成員變量和方法。

在運行時調(diào)用任意一個對象的方法

反射的常用類和函數(shù):Java反射機(jī)制的實現(xiàn)要借助于4個類:Class,Constructor,F(xiàn)ield,Method;


通常你不需要直接使用反射工具,但是他們在你需要創(chuàng)建更加動態(tài)的代碼時會很有用。反射在Java中是用來支持其他特征的,例如對象序列化和JavaBean (JavaBean 是一種JAVA語言寫成的可重用組件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數(shù)的構(gòu)造器)但是,如果能動態(tài)的地提取某各類的信息有時候還是很有用

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容