資源描述:
《黑馬程序員_java反射》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在工程資料-天天文庫。
1、黑馬程序員_JAVA反射反射的基石Class類Java程序中的各個Java類屬于同一類事物,描述這類事物的Java類名就是Classo對比提問:眾多的人用一個什么類表示?眾多的Java類用一個什么類表示?人^PersonJava類aClass對比提問:Person類代表人,它的實例對彖就是張三,李四這樣一個個具體的人,Class類代表Java類,它的各個實例對彖又分別對應什么呢?對應各個類在內(nèi)存中的字節(jié)碼,例如,Person類的字節(jié)碼,ArrayList類的字節(jié)碼,等等。一個類被類加載器加載到內(nèi)存小,占用一片存儲空I'可,這個空間里面的內(nèi)容
2、就是類的字節(jié)碼,不同的類的字節(jié)碼是不同的,所以它們在內(nèi)存中的內(nèi)容是不同的,這一個個的空間可分別用一個個的對彖來表示,這些對彖顯然具有相同的類型,這個類型是什么呢?如何得到各個字節(jié)碼對?應的實例對象(Class類型)類名.class,例如,System.class對象.getClass(),例如,newDate().getClass()Class.forName(類名),例如,Class.forName(java.util.Date);可以寫變量在運行的時候在明確類名,然后加載。九個預定義Class實例對象:參看Class.isPrimiti
3、ve方法的幫助基本的Java類型(boolean、byte、char、short、ini、long、float和double)和關鍵字void也表示為Class對彖。如void.class數(shù)組類型的Class實例對象class.isArray()總Z,只要是在源程序中出現(xiàn)的類型,都有各口的Class實例對象,例如,int[],void...isPrimitivepublicbooleanisPrimitive()判定指定的Class對彖是否表示一個基本類型。有九種預定義的Class對象,表示八個基本類型和void。這些類對象由Java虛擬機
4、創(chuàng)建,與其表示的基本類型同名,即boolean>byte>char>short>int>long>float和doubleo這些對象僅能通過下列聲明為publicstaticfinal的變量訪問,也是使此方法返回true的僅有的兒個Class對象。返回:當一11僅當該類表示一個基本類型時,才返回true從以下版本開始:JDK1.1另請參見:Boolean.TYPE,Character.TYPE,Byte.TYPE,Short.TYPE,Integer.TYPE,Long.TYPE,Float.TYPE,Double.TYPE,Void.TY
5、PE女口int.class==Integer.TYPE返I叫ture反射反射就是把Java類中的各種成分映射成相應的java類。例如,一個Java類用一個Class類的對彖來表示,一個類中的組成部分:成員變量,方法,構(gòu)造方法,包等等信息也用一個個的Java類來表示,就像汽車是一個類,汽車屮的發(fā)動機,變速箱等等也是一個個的類。表示java類的Class類顯然要捉供一系列的方法,來獲得其中的變量,方法,構(gòu)造方法,修飾符,包等信息,這些信息就是用相應類的實例對象來表示,它們是Field.Method>Contructor^Package等等。一個
6、類中的每個成員都可以用相應的反射API類的一個實例對象來表示,通過調(diào)用Class類的方法可以得到這些實例對彖后,得到這些實例對彖后冇什么用呢?怎么用呢?這正是學習和應用反射的要點。Constructor類代表某個類中的一個構(gòu)造方法得到某個類所有的構(gòu)造方法:例子:Constructor[]constructors=Class.forName(java」ang.S(ring).gctConstructors();得到某一個構(gòu)造方法:例子:Constructorconstructor=Class.forNamc(<4java」ang.Sti*in
7、g'').gctConstructor(Sti'ingBuffci*.class);獲得方法時耍用到類型創(chuàng)建實例對象:通常方式:Stringstr=newString(newStringBuffer(abc));反射方式:Stringstr=(String)constructor.newInstance(newStringBuffer(abc));調(diào)用獲得的方法時要用到上面獲得方法時要用到的相同類型的實例對象ncwinstancc(Object...initargs)使用此Constructor對彖表示的構(gòu)造方法來創(chuàng)建該構(gòu)造方法的聲明類的新
8、實例,并用指定的初始化參數(shù)初始化該實例。Class.ncwlns(ancc()方法:例子:Stringobj=(String)Class.forName(java.Iang.St