-
反射的操作都是編譯之后的操作
查看全部 -
方法的反射
方法反射的操作
method.invoke(對(duì)象,參數(shù)列表)
查看全部 -
導(dǎo)出方法:右擊/Refactor/Extract Method...
查看全部 -
?Method類,方法對(duì)象
? 一個(gè)成員方法就是一個(gè)Method對(duì)象
??? getMethods()方法獲取的是所有的public的函數(shù),包括父類繼承而來的
??? getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權(quán)限查看全部 -
靜態(tài)成員
Java 中被 static 修飾的成員稱為靜態(tài)成員或類成員。它屬于整個(gè)類所有,而不是某個(gè)對(duì)象所有,即被類的所有對(duì)象所共享。靜態(tài)成員可以使用類名直接訪問,也可以使用對(duì)象名進(jìn)行訪問。當(dāng)然,鑒于他作用的特殊性更推薦用類名訪問
查看全部 -
靜態(tài)成員
Java 中被 static 修飾的成員稱為靜態(tài)成員或類成員。它屬于整個(gè)類所有,而不是某個(gè)對(duì)象所有,即被類的所有對(duì)象所共享。靜態(tài)成員可以使用類名直接訪問,也可以使用對(duì)象名進(jìn)行訪問。當(dāng)然,鑒于他作用的特殊性更推薦用類名訪問
查看全部 -
Class類
Class.forName("類的全稱")
不僅表示了類的類類型,還代表了動(dòng)態(tài)加載類
請(qǐng)大家區(qū)分編譯、運(yùn)行
編譯時(shí)刻加載類是靜態(tài)加載類、運(yùn)行時(shí)刻加載類是動(dòng)態(tài)加載類
查看全部 -
package?com.imooc.reflect; public?class?ClassDemo1?{ ????public?static?void?main(String[]?args)?{ ????????//Foo的實(shí)例對(duì)象如何表示 ????????Foo?foo1?=?new?Foo();//foo1就表示出來了. ????????//Foo這個(gè)類?也是一個(gè)實(shí)例對(duì)象,Class類的實(shí)例對(duì)象,如何表示呢 ????????//任何一個(gè)類都是Class的實(shí)例對(duì)象,這個(gè)實(shí)例對(duì)象有三種表示方式 ???????? ????????//第一種表示方式--->實(shí)際在告訴我們?nèi)魏我粋€(gè)類都有一個(gè)隱含的靜態(tài)成員變量class ????????Class?c1?=?Foo.class; ???????? ????????//第二中表達(dá)方式??已經(jīng)知道該類的對(duì)象通過getClass方法 ????????Class?c2?=?foo1.getClass(); ???????? ????????/*官網(wǎng)?c1?,c2?表示了Foo類的類類型(class?type) ?????????*?萬事萬物皆對(duì)象, ?????????*?類也是對(duì)象,是Class類的實(shí)例對(duì)象 ?????????*?這個(gè)對(duì)象我們稱為該類的類類型 ?????????*? ?????????*/ ???????? ????????//不管c1??or?c2都代表了Foo類的類類型,一個(gè)類只可能是Class類的一個(gè)實(shí)例對(duì)象 ????????System.out.println(c1?==?c2); ???????? ????????//第三種表達(dá)方式 ????????Class?c3?=?null; ????????try?{ ????????????c3?=?Class.forName("com.imooc.reflect.Foo"); ????????}?catch?(ClassNotFoundException?e)?{ ????????????//?TODO?Auto-generated?catch?block ????????????e.printStackTrace(); ????????} ????????System.out.println(c2==c3); ???????? ????????//我們完全可以通過類的類類型創(chuàng)建該類的對(duì)象實(shí)例---->通過c1?or?c2?or?c3創(chuàng)建Foo的實(shí)例對(duì)象 ????????try?{ ????????????Foo?foo?=?(Foo)c1.newInstance();//需要有無參數(shù)的構(gòu)造方法 ????????????foo.print(); ????????}?catch?(InstantiationException?e)?{ ????????????//?TODO?Auto-generated?catch?block ????????????e.printStackTrace(); ????????}?catch?(IllegalAccessException?e)?{ ????????????//?TODO?Auto-generated?catch?block ????????????e.printStackTrace(); ????????} ???? ???????? ????} } class?Foo{ ???? ????void?print(){ ????????System.out.println("foo"); ????} }
查看全部 -
Class類查看全部
-
JAVA-Reflect專題
查看全部 -
m.invoke()繞過編譯就繞過了泛型
查看全部 -
m.invoke(對(duì)象,參數(shù)new Object[]{10,20});方法如果沒有返回值返回null,有返回值返回具體的返回值。
查看全部 -
Field[] fs=c.getFields()獲取所有的public 的成員變量的信息
Field[] fs=c.getDeclaredFields()獲取該類自己聲明的成員變量的信息
for(Field a:fs){
Class b=a.getType();得到成員變量的類型的類類型
}
構(gòu)造函數(shù)也是對(duì)象java.lang.constructor封裝了構(gòu)造函數(shù)的信息
getConstructor獲取所有的public的構(gòu)造函數(shù)
constructor[] a=c.getConstructor();
constructor[] a=c.getDeclaredConstructor();
for(constructor b:a){
Class[]? c=b.getParameterTypes();獲取構(gòu)造函數(shù)的參數(shù)列表,得到參數(shù)列表的類類型
}
查看全部 -
public static void printClassMessage(Object obj){
Class c=obj.getClass();
Method[] ms=c.getMethods();getmethods獲取所有的public的函數(shù),包括父類繼承而來的。
c.getDeclaredMethods()獲取所有該類自己聲明的方法,不問訪問權(quán)限
for(int i=0;i<ms.length;i++){
Class a=ms[i].getReturnType();得到方法的返回值類型的類類型
String b=ms[i].getName();得到方法的名稱
Class[] c=ms[i].getParameterTypes();獲取參數(shù)類型。得到的是參數(shù)列表的類型的類類型
for(Class d:c){
String a=d.getName()
}
}
查看全部 -
Class c=Class.forName(args[0])動(dòng)態(tài)加載類
office oa=(office)c.newInstance()
使用子類實(shí)現(xiàn)這個(gè)接口
編譯時(shí)javac office word即可
查看全部
舉報(bào)