反射:
object a = new object();
這段代碼運行了起來,首先JVM會啟動,你的代碼會編譯成一個.class文件。然后被類加載器加載到JVM的內存中,你的類object加載到方法區中,創建了object類的class對象到堆中,每個類只有一個class對象,加載好后為你的對象分配內存,初始化也就是new object();反射就是在我們程序運行時需要動態的加載一些類,這些類可能之前用不到所以不用加載到jvm而是在運行時需要才加載
?jvm編譯的.class文件里面包含了當前字節碼文件里面的所有內容只要我們獲取到這個class對象 就可以對其為所欲為!!!
? 這個class對象中包含了對應字節碼文件的所有成員變量 (Field) ? 所有成員方法(Method)? 構造方法(Constructor)
?二,反射機制的作用:
1,反編譯:.class-->.java
在運行時判斷任意一個對象所屬的類。
在運行時構造任意一個類的對象。
在運行時判斷任意一個類所具有的成員變量和方法。
在運行時調用任意一個對象的方法
反射的常用類和函數:Java反射機制的實現要借助于4個類:Class,Constructor,Field,Method;
通常你不需要直接使用反射工具,但是他們在你需要創建更加動態的代碼時會很有用。反射在Java中是用來支持其他特征的,例如對象序列化和JavaBean (JavaBean 是一種JAVA語言寫成的可重用組件。為寫成JavaBean,類必須是具體的和公共的,并且具有無參數的構造器。)但是,如果能動態的地提取某各類的信息有時候還是很有用