詳情描述
千鋒北京Java培訓(xùn)技術(shù)分享:Java反射那些事
反射的概念在 Java中是一個(gè)難點(diǎn),對(duì)于剛學(xué)習(xí)Java的同學(xué)來說,不太容易理解,如何更好的掌握反射技術(shù),并學(xué)會(huì)在實(shí)際中應(yīng)用,需要反復(fù)練習(xí)和研究,千鋒小編在這里建議大家,在Java培訓(xùn)學(xué)習(xí)反射過程中不要心急,老話說心急吃不了熱豆腐,只要我們有唧唧復(fù)唧唧的精神,吃透反射的概念那是遲早的事。
什么是反射
Java 反射是可以讓我們?cè)谶\(yùn)行時(shí)獲取類的方法、屬性、父類、接口等類的內(nèi)部信息的機(jī)制。也就是說,反射本質(zhì)上是一個(gè)“反著來”的過程。我們通過new創(chuàng)建一個(gè)類的實(shí)例時(shí),實(shí)際上是由Java虛擬機(jī)根據(jù)這個(gè)類的Class對(duì)象在運(yùn)行時(shí)構(gòu)建出來的,而反射是通過一個(gè)類的Class對(duì)象來獲取它的定義信息,從而我們可以訪問到它的屬性、方法,知道這個(gè)類的父類、實(shí)現(xiàn)了哪些接口等信息。
我們知道使用javac能夠?qū)?java文件編譯為.class文件,這個(gè).class文件包含了我們對(duì)類的原始定義信息(父類、接口、構(gòu)造器、屬性、方法等)。.class文件在運(yùn)行時(shí)會(huì)被加載到Java虛擬機(jī)(JVM)中,當(dāng)一個(gè).class文件被加載后,JVM會(huì)為之生成一個(gè)Class對(duì)象,我們?cè)诔绦蛑型ㄟ^new實(shí)例化的對(duì)象實(shí)際上是在運(yùn)行時(shí)根據(jù)相應(yīng)的Class對(duì)象構(gòu)造出來的。確切的說,這個(gè)Class對(duì)象實(shí)際上是java.lang.Class泛型類的一個(gè)實(shí)例,比如Class對(duì)象即為一個(gè)封裝了MyClass類的定義信息的Class實(shí)例。由于java.lang.Class類不存在公有構(gòu)造器,因此我們不能直接實(shí)例化這個(gè)類。
如何獲取,class文件對(duì)象
1、使用類的對(duì)象獲取
每個(gè)類都使用Object作為父類,Object類方法
返回這個(gè)類的class文件對(duì)象,方法返回值Class類型對(duì)象
2、使用類的靜態(tài)屬性獲取
類名.class 返回這個(gè)類的class文件對(duì)象.屬性運(yùn)行結(jié)果也是Class類型對(duì)象
3、使用Class類的靜態(tài)方法獲取
Class類靜態(tài)方法 forName(String 類名) 傳遞字符串類名,獲取到這個(gè)類的class文件對(duì)象,方法返回值也是Class類型對(duì)象
不管用哪種方式獲取的Class對(duì)象,他們都是相等的。
反射在 Android中的應(yīng)用
JAVA反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語言的反射機(jī)制。
然而在android中Google很多的類的某些方法不讓第三方應(yīng)用去調(diào)用,通過java反射機(jī)制能把這些隱藏方法獲取出來并調(diào)用,三方應(yīng)用上我們就很方便的去用這些方法。
來千鋒教育學(xué)Java,讓Java反射不在是你的弱點(diǎn)和難點(diǎn),金牌講師帶你學(xué)Java,講師和同學(xué)的雙向交流,讓你吃透Java。
千鋒教育:
千鋒北京校區(qū):
北京天豐利校區(qū)():北京市海淀區(qū)寶盛北里西區(qū)28號(hào)天豐利商城4層
北京沙河校區(qū):北京市昌平區(qū)沙陽路18號(hào)北京科技職業(yè)技術(shù)學(xué)院廣場(chǎng)服務(wù)樓2層、南區(qū)服務(wù)樓2層
pp面授課程:全棧HTML5+培訓(xùn)、UI交互設(shè)計(jì)培訓(xùn)、PHP培訓(xùn)、Java+云數(shù)據(jù)培訓(xùn)、大數(shù)據(jù)開發(fā)培訓(xùn)游戲開發(fā)培訓(xùn)、Python培訓(xùn)、Linux云計(jì)算培訓(xùn)、全棧軟件測(cè)試培訓(xùn)、Android培訓(xùn)、iOS培訓(xùn)、好程序員