-
@Java反射機制——方法反射的基本操作 一、如何獲取某個方法:方法的【名稱】和【方法的參數列表】才能【唯一確定】某個方法 1、要獲取一個類的某個方法,需要先得到類類型 2、通過Class.getMethod(name,parameterTypes)獲得public的該方法:如c.getMethod("print",new Class[]{int.class,int.class})或者參數寫成int,int; ——> 來獲取 public void print(int a,int b) 3、同樣getDeclaredMethdo(name,paramterTypes)獲得自己聲明的該方法 二、方法的反射操作:method.invoke(對象,參數列表); 1、方法反射:通過調用方法的對象invoke(【對象】,參數列表),來操作定義該方法的【對象】,實現該方法 2、獲得方法的對象后,用對象method來進行方法調用Object o = method.invoke(c,new Object[]{10,20})也可以直接寫10,20。若方沒有返回值,則返回null。查看全部
-
@Java反射機制——獲取成員變量&構造函數 一、成員變量是java.lang.reflect.Field的對象 1、Field類封裝了關于成員變量的操作 2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息 3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息 4、field.getType()獲得成員類型的類類型 5、field.getName()獲得成員的名稱 二、構造函數是java.lang.Constructor類的對象 1、通過Class.getConstructor()獲得Constructor[]所有共有構造方法信息 2、建議getDeclaredConstructors()獲取自己聲明的構造犯法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[]查看全部
-
everything is object very good查看全部
-
@Java反射機制——獲取方法信息 一、基本的數據類型,void關鍵字等都存在類類型 二、Class類的基本API操作的 1、c.getName()可以獲取類的名稱 2、c.getMethods()獲取類的【public方法】集合,【包括繼承來的】 ***注意【所有方法都是Method類的對象】 3、c.getDeclaredMethods()獲取的是所有該類【自己聲明】的方法,【不問訪問權限】 三、Method類提供了一些操作方法的方法。。。 1、.getReturnType()得到該方法的返回值類型的類類型(class),如int.class String.class 2、.getName()得到方法的名稱 3、.getParameterTypes()獲得參數列表類型的類類型,如參數為(int,int)則得到(int.class ,int class)查看全部
-
@Java反射機制——動態加載類 1、靜態加載類,是編譯時刻加載;動態加載類,是運行時刻加載 2、new創建對象:是靜態加載類,在編譯時刻就需要加載所有的【可能使用到的類】。有一個類有問題(如不存在),都不能通過編譯,會報錯。 3、Class.forName()通過動態加載類,可以用到一個類時,才進行加載。 【功能性的類盡量使用動態加載,并對新添的類實現功能性接口(標準),這樣就不用重新編譯】查看全部
-
@Java反射機制——Class類的使用 一、類是誰的對象:類是java.lang.Class類的實例對象 1、任何類都是Class類的實例對象 ,這個對象表示這個類的類類型(class type) 2、獲得class實例有三種方法,例: Foo foo = new Foo(); · 通過類名 Class c1 = Foo.class 得到(說明每個類都有一個隱含的靜態成員) · 通過類的實例 Class c2 = foo.getClass();得到 · 通過 Class c3 = Class.forName(Foo); 得到 3、使用類類型,可以創建類的實例:Foo foo = (Foo)c1.newInstance();//需要有無參數的構造方法查看全部
-
5)Class類的基本API操作 public class ClassUtil { /** * 打印類的信息,包括類的成員函數、成員變量(只獲取成員函數) * @param obj 該對象所屬類的信息 */ public static void printClassMethodMessage(Object obj){ //要獲取類的信息 首先要獲取類的類類型 Class c = obj.getClass();//傳遞的是哪個子類的對象 c就是該子類的類類型 //獲取類的名稱 System.out.println("類的名稱是:"+c.getName()); /* * Method類,方法對象 * 一個成員方法就是一個Method對象 * getMethods()方法獲取的是所有的public的函數,包括父類繼承而來的 * getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限 */ Method[] ms = c.getMethods();//c.getDeclaredMethods() for(int i = 0; i < ms.length;i++){ //得到方法的返回值類型的類類型 Class returnType = ms[i].getReturnType(); System.out.print(returnType.getName()+" "); //得到方法的名稱 System.out.print(ms[i].getName()+"("); //獲取參數類型--->得到的是參數列表的類型的類類型 Class[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes) { System.out.print(class1.getName()+","); } System.out.println(")"); } }查看全部
-
4)基本的數據類型 void關鍵字 都存在類類型 public class ClassDemo2 { public static void main(String[] args) { Class c1 = int.class;//int 的類類型 Class c2 = String.class;//String類的類類型 String類字節碼(自己發明的) Class c3 = double.class; Class c4 = Double.class; Class c5 = void.class; System.out.println(c1.getName()); System.out.println(c2.getName()); System.out.println(c2.getSimpleName());//不包含包名的類的名稱 System.out.println(c5.getName()); } }查看全部
-
Java中集合的泛型,是防止錯誤的輸入,只在編譯階段有效查看全部
-
反射的操作是編譯后的操作查看全部
-
挺好的透徹查看全部
-
好查看全部
-
zyzyz查看全部
-
好神奇啊,類的動態編譯真是太好玩了。查看全部
-
類的信息獲?。?查看全部
舉報
0/150
提交
取消