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