反射:
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)的地提取某各類的信息有時候還是很有用