反射:
object a = new object();
這段代碼運(yùn)行了起來,首先JVM會(huì)啟動(dòng)吗冤,你的代碼會(huì)編譯成一個(gè).class文件。然后被類加載器加載到JVM的內(nèi)存中九府,你的類object加載到方法區(qū)中椎瘟,創(chuàng)建了object類的class對(duì)象到堆中,每個(gè)類只有一個(gè)class對(duì)象侄旬,加載好后為你的對(duì)象分配內(nèi)存肺蔚,初始化也就是new object();反射就是在我們程序運(yùn)行時(shí)需要?jiǎng)討B(tài)的加載一些類儡羔,這些類可能之前用不到所以不用加載到j(luò)vm而是在運(yùn)行時(shí)需要才加載
?jvm編譯的.class文件里面包含了當(dāng)前字節(jié)碼文件里面的所有內(nèi)容只要我們獲取到這個(gè)class對(duì)象 就可以對(duì)其為所欲為P颉!汰蜘!
? 這個(gè)class對(duì)象中包含了對(duì)應(yīng)字節(jié)碼文件的所有成員變量 (Field) ? 所有成員方法(Method)? 構(gòu)造方法(Constructor)
?二仇冯,反射機(jī)制的作用:
1,反編譯:.class-->.java
在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類族操。
在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象赞枕。
在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法。
在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法
反射的常用類和函數(shù):Java反射機(jī)制的實(shí)現(xiàn)要借助于4個(gè)類:Class,Constructor炕婶,F(xiàn)ield姐赡,Method;
通常你不需要直接使用反射工具柠掂,但是他們?cè)谀阈枰獎(jiǎng)?chuàng)建更加動(dòng)態(tài)的代碼時(shí)會(huì)很有用项滑。反射在Java中是用來支持其他特征的,例如對(duì)象序列化和JavaBean (JavaBean 是一種JAVA語言寫成的可重用組件涯贞。為寫成JavaBean枪狂,類必須是具體的和公共的,并且具有無參數(shù)的構(gòu)造器宋渔。)但是州疾,如果能動(dòng)態(tài)的地提取某各類的信息有時(shí)候還是很有用