-
帶泛型的數組 和不帶的 在類類型上相同 只防止編譯時出錯,繞過編譯,運行時泛型內放不同類型參數不會報錯查看全部
-
用反射獲得目標內里面的方法后,用invoke調用 如圖查看全部
-
方法的反射: 1.獲取A類中的print(int,int)方法: ①要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1=new A(); Class c= a1.getClass(); ②獲取方法 由名稱和參數列表來決定,getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式 表示new Class[]{int.class,int.class},也可以直接列舉類類型 2.方法的反射操作:是用m對象來進行方法調用,和a1.print(10,20)調用的方法相同 m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(對象名,參數);//方法如果沒有返回值返回null,如果有返回值返回具體值,參數可用數組的方式表示,也可以直接列舉,沒有參數就不寫 public Class A{ public void print(){}; public void Print(Sting a,String b){} public void Print(int a,int b){}; } public Class B{ public static void main(String[] args){ A a1 = new A(); Class c= a1.getclass; Method getMet=c.getMethod("print",String.class,String.class); Object obj=getMet.invoke(a1,"df","df"); } }查看全部
-
如何獲得class A里面的方法已知 A a1=new A();查看全部
-
二、構造函數是java.lang.Constructor類的對象 1、通過Class.getConstructor()獲得Constructor[]所有公有構造方法信息 2、建議getDeclaredConstructors()獲取自己聲明的構造方法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[] 成員變量也是對象,是java.lang.reflect.Field的對象;查看全部
-
Java反射機制——獲取成員變量&構造函數 一、成員變量是java.lang.reflect.Field的對象 1、Field類封裝了關于成員變量的操作 2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息 3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息 4、field.getType()獲得成員類型的類類型 5、field.getName()獲得成員的名稱查看全部
-
基本數據類型的類類型: Class c1=int.class; c1.getName=int; Class c2=String.class; Class c3=void.class; c2.getName=void; Class c=obj.getClass(); 如何獲取類類型的信息: c.getName(); c.getMethods();獲取類里面的public的函數,包括父類的方法 得到Method[]數組,如何得到方法的方法名、返回值、返回類型 見圖查看全部
-
萬事萬物皆對象 只有static和變量不是(例如int a=5,a不是) 動態加載類: Class.forName("類的全程") 為動態加載(運行加載) (編譯時加載時靜態加載,new創建的對象是靜態加載,在編譯時就要加載所有可能用到的類) 希望用哪個就加載哪個———這就是動態加載的用處 先創建一個類類型class 然后在用class創建實例(因為只能指定一個實例,同時現實中可能有多種類,所以只要創建一個規范借口就可以,以后用那種就實現這個借口類就可以) ok!查看全部
-
創建一個類類型的三種方法: 1)Foo類的對象是 foo1 Class c2 = foo1.getClass() --->已知該類的對象,通過該類的對象通過getClass方 法獲取Foo類的類類型 2)Foo類的類類型c1指的是Class的對象 Class c1 = Foo.class; 3)Class c3=Class.forName("com.imooc.reflect.Foo"); 三種方式創建的類類型都相等,都是Foo的類類型; Class的用法: 可以通過類的類類型創建Foo的實例對象 Foo foo=(Foo)c1.newInstance(); 4)我們可以通過類的類類型來創建該類的實例對象 Foo foo = (Foo)c1.newInstance(); 前提是需要有無參數的構造方法,它要調用查看全部
-
java動態加載類,如果在編譯期就寫死的話,后面的代碼不好維護,如果改變類的話,整段代碼需要重新維護。但是如果動態加載類的話,可以動態加載接口,需要具體的實現再直接添加類即可。查看全部
-
筆記1查看全部
-
第三種方式查看全部
-
兩種得到class對象的方式查看全部
-
class對象三種獲取方式 1.Class c1= A.class; 2.Class c2=a.getClass() 3.Class c3 = forNameClass(pakcage.A) 反射機制是在編譯后的 所以可以繞過標準 所有的new 對象都是靜態編譯過程,就是必須編譯時會檢查 invoke方法是反射操作的核心 Mothed m = c1.getMethod(方法名 ,參數列表) m.invoke(代理的對象, 參數) 反射是繞過編譯的。 集合的泛型只為了防止錯誤輸入,編譯階段有效,繞過編譯,使用反射是不會控制集合中的數據類型的。 方法的反射使用: Class c1=對象a.getClass() Method m = c1.getMethod(方法名,參數列表) Object o =m.invoke(對象a,參數列表,可以一一列舉,也可以用數組)查看全部
-
方法的反射: 1.獲取A類中的print(int,int)方法: ①要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1=new A(); Class c= a1.getClass(); ②獲取方法 由名稱和參數列表來決定,getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式 表示new Class[]{int.class,int.class},也可以直接列舉類類型 2.方法的反射操作:是用m對象來進行方法調用,和a1.print(10,20)調用的方法相同 m.invoke(a1,new Object[]{10,20}) Object o=m.invoke(對象名,參數);//方法如果沒有返回值返回null,如果有返回值返回具體值,參數可用數組的方式表示,也可以直接列舉,沒有參數就不寫 public Class A{ public void print(){}; public void Print(Sting a,String b){} public void Print(int a,int b){}; } public Class B{ public static void main(String[] args){ A a1 = new A(); Class c= a1.getclass; Method getMet=c.getMethod("print",String.class,String.class); Object obj=getMet.invoke(a1,"df","df"); } }查看全部
舉報
0/150
提交
取消