-
所有類都是對象,class類的對象。只有靜態產量和基本數據類型不是對象查看全部
-
//獲取類的類型(Class Type)<br> 知道類名:Class c1 = Foo.class;<br> 知道對象:Class c2 = foo1.getClass(); 知道類路徑:Class c3 = Class.forName("com.imooc.reflect.Foo");查看全部
-
本例通過list集合來說明反射操作是去泛型化的,首先演示了兩個list集合,list1是不帶泛型的,list2是帶者string類的泛型,通過list2.add()方法往集合中添加int類型時,編譯器報錯,但是list1.getClass()返回值與list2返回值同時指向同一個對象,說明list1以及list2的泛型只在編譯期有效,在運行期間字節碼是去泛型化的。接下來演示了如何去泛型化,還是通過反射getMethod()傳入list的“add”方法以及指定參數類型為Object,然后執行方法的invoke()來操作list2,參數為int類型的10,我們看到執行之后,10就添加進list2中了,這樣就繞過了泛型,list2中就有了Int 類型。查看全部
-
getClass()得到類的實例之后,調用getMethod方法,Method的實例去接收返回值,然后調用method.invoke()方法去執行實例對象的真正方法,注意invoke的兩個參數(第一個參數是反向操作的實例(m),第二個對象是方法接收的參數(10,20)),在這里等同于 m.print(10,20)。查看全部
-
平常使用new創建一個對象的實例屬于靜態加載,在編譯期間要加載所有類的實例,一旦一個類沒有經過編譯就會出現類找不到的問題,這個問題使用動態加載就可以解決,通過Class.forName(”類的全路徑名”)就可以加載類,返回的是加載類的類類型,通過該類的對象newInstance方法,就可以獲得這個對象的實例,返回的是這個實例對象的類型,一般使用接口,返回接口具有可擴展性。查看全部
-
class c1= Foo.class; class c2 =foo.getClass() class c3 = Class.forName(com.xz.Foo)查看全部
-
類對象查看全部
-
第三種查看全部
-
java.lang.Class查看全部
-
Class類對象的三種獲得方式 ①Foo.class ②foo.getClass ③Class.forName查看全部
-
通過反射,獲取成員變量的信息查看全部
-
1.方法的反射操作 1).如何獲取某個方法:方法的名稱和方法的參數列表才能唯一決定一個方法 2).方法的反射操作:method.invoke(對象,參數列表); Class A{ Public void print(int a,int b){ System.out.print(a+b); } Public void print(String a,String b){ System.out.print(a.toUpperCase()+b.toLowerCase()); } } //要獲取Print(int ,int) 方法 1:要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的 A a1=new A(); Class c=a1.getClass(); 2:獲取方法 名稱和參數列表來決定 getMethod 獲取的是Public的方法 Method m=c.getMethod("print",int.class,int.class); //方法的反射操作 是用m對象來進行方法調用 //方法如果沒有返回值返回null,有返回值返回具體的返回值,默認的是Object 需要進行類型轉換 Object obj= m.invoke(a1,new Object[]{10,20});查看全部
-
Class c1=int.class;//c1是int類的類類型 Class c2=String.class;//c2是String類的類類型 Class c3=void.class;//c3是void關鍵字類的類類型 1.在面向對象的世界里,萬事萬物皆對象。 類是對象,方法也是對象 等等 2. 定義類Class Foo{} 通過類的實例化獲取類的實例化類對象----如Foo foo1=new Foo(); 獲取類的類型的方法如下: 類名.class;----如:Class c1=Foo.class; 類對象.getClass();-----如:Class c2=foo1.getClass(); Class.forName(類的全稱);----如:Class c3=Class.forName(); 3.獲取類的全名 Class c=obj.getClass();//c是obj類的類類型 //獲取類的名稱 c.getName; 4.方法也是一個對象,方法是Method的實例化對象 Method[] ms=c.getMethods(); for(int i=0;i<ms.length;i++){ //得到方法的返回值類型的類類型 Class returnType=ms[i].getReturnType(); //得到方法的名稱 ms[i].getName(); } 5.成員變量也是對象,是java.lang.reflect.Field的實例化對象。 Field類封裝了關于成員變量的操作。 getField()方法獲取的是所有的public的成員變量的信息。 Field field=c.getField(); //得到成員變量類的類類型 Class fieldType=field.getType(); //得到成員變量的名稱 field.getName(); 6.構造函數也是對象,構造函數是java.lang.Constructor 的實例化對象 getConstructors()獲取所有的public的構造函數 getDeclaredConstructors()獲得所有的構造函數查看全部
-
new 創建對象,是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類查看全部
-
如何去獲得方法對象,然后用方法對象進行反射操作查看全部
舉報
0/150
提交
取消