-
成員變量也是對象
getFields()方法獲取的是所有的public的成員變量的信息 返回Field[]
java.lang.reflect.Field 封裝了關(guān)于成員變量的操作
getDeclaredFields()獲取的是該類自己聲明的成員變量的信息
getType()獲取成員變量的類類型
getName()獲取成員變量的名稱
構(gòu)造函數(shù)也是對象
getConstructors()獲取所有的public的構(gòu)造函數(shù),返回Constructor[]
getDeclaredConstructors()得到所有構(gòu)造函數(shù),包括所有訪問修飾符。
java.lang.Constructor中封裝了構(gòu)造函數(shù)的信息
getName()獲取構(gòu)造函數(shù)名稱
getParameterTypes()獲取參數(shù)列表的類類型,返回Class[]
查看全部 -
getName():獲取類類型的具體名稱。如果是類形式的,名稱為類的全稱,例如:c1的類類型名稱為int,c2的類類型名稱為java.lang.String。
getSimpleName():不包含包名的類的名稱。(例如:c2的類類型名稱為String)
void關(guān)鍵字 都存在類型
Method類
一個(gè)成員方法就是一個(gè)Method對象
getMethod()方法獲取的是所有的public的函數(shù),包括父類繼承而來的方法
getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權(quán)限
getReturnType();獲得方法返回值類的類類型
getParameterTypes();獲得參數(shù)列表的類類的類類型 Class[]
查看全部 -
Class.forName("類的全稱")
不僅表示了類的類類型,還表示了動態(tài)加載類
編譯時(shí)刻加載類是靜態(tài)加載類、運(yùn)行時(shí)刻加載類是動態(tài)加載類
描述:在 main 函數(shù)中,有一個(gè) String args[] 參數(shù),這就表示在執(zhí)行某 .class 文件時(shí),可以對 main 函數(shù)傳字符串參數(shù)(例如:命令行中:java OfficeBetter Excel,傳給主函數(shù)的參數(shù)就是Excel,如果傳多個(gè)參數(shù),參數(shù)用空格隔開),Office類中使用了兩個(gè)類(沒有提供這兩個(gè)類),并調(diào)用其相應(yīng)的方法,然后進(jìn)行編譯報(bào)錯(cuò),提示找不到這兩個(gè)類,我們只提供了Word類和相應(yīng)方法,并對它進(jìn)行編譯(這是因?yàn)橹皇褂肳ord的功能),這時(shí)候再對Office這個(gè)類進(jìn)行編譯,這時(shí)候只報(bào)Excel找不到的錯(cuò)誤,現(xiàn)在核心問題是只想使用Word,而不使用Excel這個(gè)類,但是報(bào)錯(cuò)(這樣就不能運(yùn)行,導(dǎo)致不能使用Word的功能),因?yàn)閚ew 對象是靜態(tài)加載類的方式,在編譯時(shí)刻就需要加載所有可能使用到的類,但實(shí)際應(yīng)用希望用到哪個(gè)類加載哪個(gè)類,這樣就不會在編譯時(shí)報(bào)錯(cuò),并且可以運(yùn)行,所以可以通過動態(tài)加載類來解決該問題,通過Class.forName(args[0])動態(tài)加載這個(gè)類的Class實(shí)例對象,通過傳入一個(gè)類的路徑,即使沒有這個(gè)類,編譯時(shí)刻也不會報(bào)錯(cuò),但運(yùn)行時(shí)刻會報(bào)錯(cuò),緊接著就可以通過Office的類類型創(chuàng)建Word對象,如果強(qiáng)制轉(zhuǎn)換為Excel類型,但是加載時(shí)卻是Word類,就可能發(fā)生錯(cuò)誤,這時(shí)就需要給Word和Excel指定一個(gè)標(biāo)準(zhǔn),也就是創(chuàng)建一個(gè)接口,并聲明相應(yīng)方法,并且讓W(xué)ord和Excel實(shí)現(xiàn)這個(gè)接口,如果傳入的參數(shù)是Excel,只需要再創(chuàng)建一個(gè)Excel并實(shí)現(xiàn)該接口,這樣就不用在主程序中修改類型了,實(shí)際應(yīng)用中功能類通常使用動態(tài)加載類。
查看全部 -
類是對象,類是java.lang.Class類的實(shí)例對象
Class類的實(shí)例對象表示方式:
1、隱含的靜態(tài)成員變量class
Class c1=Foo.class;
2、類的getClass方法
Foo?foo1=new Foo();
Class c1=foo1.getClass();
c1,c2表示了Foo類的類類型(class type)
不管c1,c2都代表了Foo類的類類型,一個(gè)類只可能是Class類的一個(gè)實(shí)例對象
3、Class.forName("類全名")
Class c3=Class.forName("com.Foo");
通過類類型創(chuàng)建該類的對象實(shí)例
Foo foo=(Foo) c1.newInstance();
注意:如果c1是A類的Class實(shí)例,則創(chuàng)建的是A類的對象,如果是B類的Class實(shí)例,則創(chuàng)建的是B類的對象,并且需要做強(qiáng)制類型轉(zhuǎn)換。
默認(rèn)需要該類有無參數(shù)的構(gòu)造方法。
查看全部 -
方法反射的操作
查看全部 -
類的靜態(tài)加載與動態(tài)加載
查看全部 -
成員變量的反射和構(gòu)造函數(shù)的反射
知識點(diǎn)1:成員變量的反射
java.lang.reflect.Field:成員變量也是對象,F(xiàn)ield類封裝了關(guān)于成員變量的操作。
getFields():獲取該類類型所有的public的成員變量信息,返回值為Field類型的數(shù)組。
getDeclaredFields():獲取所有自己聲明的成員變量信息(不區(qū)分訪問修飾符的限制),返回值為Field類型的數(shù)組。
getType():獲取成員變量類型的類類型,返回值類型為Class。
getName():如果是成員變量類型調(diào)用該方法,則返回該類型的名字,如果是成員變量調(diào)用該方法,則返回成員變量名字。
知識點(diǎn)2:構(gòu)造函數(shù)的反射
java.lang.Constructor:構(gòu)造函數(shù)也是對象,Constructor中封裝了構(gòu)造函數(shù)的信息。
getConstructors():類類型調(diào)用的方法,獲取所有公有的構(gòu)造方法,返回值類型為Constructor數(shù)組。
getDeclaredConstructors():類類型調(diào)用的方法,獲取所有自己聲明的構(gòu)造方法(不區(qū)分訪問修飾符),返回值類型為Constructor數(shù)組。
getName():Constructor類的方法,獲取構(gòu)造方法名(這里為類路徑+構(gòu)造方法名)。
getParameterTypes():Constructor對象的方法,獲取構(gòu)造函數(shù)的參數(shù)列表,得到的是參數(shù)列表的類類型,返回值為Class類型數(shù)組。
查看全部 -
今天的筆記
查看全部 -
靜態(tài)成員、普通數(shù)據(jù)類型不是對象。類是java.lang.Class的對象。
任何一個(gè)類都是Class的實(shí)例對象,這個(gè)實(shí)例對象有三種表示方式
第一種表示方式????任何一個(gè)類都有一個(gè)隱含的靜態(tài)成員變量class
????Class c1=Foo.class;
第二種表達(dá)方式????已經(jīng)知道該類的對象通過getClass方法
? ? ? Class c2=foo1.getClass();
第三種表達(dá)方式
????Class c3=null;
? ?c3=Class.forName("路徑 ? 包.類名");
c1,c2,c3表示了Foo類的類類型(class type)
我們完全可以通過類的類類型創(chuàng)建該類的對象實(shí)例
Foo foo=(Foo)c1.newInstance();
查看全部 -
aaaaa
查看全部 -
new是靜態(tài)加載類,在編譯的時(shí)候把可能用到的類全都加載進(jìn)來。
查看全部 -
java中集合的泛型,是防止錯(cuò)誤輸入的,只在編譯階段有效,繞過編譯就無效了
總結(jié):反射可以繞過編譯
查看全部 -
方法的反射
Class c=a1.getClass()
獲取方法
Method m=c.getDeclaredMethod(name,parameterTypes);
方法的反射操作
m.invoke(obj,args);
對于無參的方法
Method m2=c.getMethod("print");
m2.invoke(a1,new Object[]{});
查看全部 -
構(gòu)造函數(shù)也是對象
java.lang.Constructor中封裝了構(gòu)造函數(shù)的信息
getConstructors獲取所有的public的構(gòu)造函數(shù)
getDeclaredConstuctors得到所有的構(gòu)造函數(shù)
獲取構(gòu)造函數(shù)的參數(shù)列表 ?得到的是參數(shù)列表的類類型
Class[] paramTypes=constructor.getParameterTypes();
查看全部 -
成員變量也是對象
java.lang.reflect.Field
Field類封裝了關(guān)于成員變量的操作
getFields()方法獲取的是所有public的成員變量的信息
getDeclaredFields獲取的是該類自己聲明的成員變量的信息
得到成員變量的類型的類類型
Class fieldType=field.getType();
查看全部
舉報(bào)