-
獲取方法對象 然后用方法對象進行反射操作方法查看全部
-
方法的反射 首先獲取方法的對象(獲取方法print(string,string)) Method m = c.getMethod("print",String.class,String.class); 本來是類的對象a1來操作方法 a1.print("hello","WORLD"); 但是現在反過來操作 m.invoke(對象,參數) ------n.invoke(a1,newObject[]{})或者 n.invoke(a1,參數)有參數就寫 沒有 參數就不傳查看全部
-
方法的反射操作 用m對象來進行方法調用 和對象.方法查看全部
-
c.getMethod("print",new Class[]{int.class,int.class}) 獲取方法名為print 參數為int int的方法 跟寫法c.getMethod("print",int.class,int.class)一樣查看全部
-
要獲取一個方法 就是獲取一個類的信息 那么首先要獲取這個類的類類型 A a = new A(); Class c = c.getClass(); c就是這個類的類類型 getMethod() 獲取的是public的方法 getDeclaredMethod()獲取的是自己聲明的方法 c.getMethod(name,new Class[]{類類型}) c.getMethod("print",new Class[]{int.class,int.class}) 獲取方法名為print 參數為int int的方法查看全部
-
java反射機制 1 Class類反射 1.1 Class類 1)在在面向對象的世界里,萬事皆對象 java語言中,類是對象,類是java.lang.Class類的實例對象 2)類的實例的表示方式 第一種方式 Class c1 = Obj.Class; 第二種方式 Class c2 = obj.getClass(); 第三種方式 Class c3 = new Class.forName("包名+類名"); --- --- 引用 Caroline的筆記 --- Class類 1)在面向對象的世界里,萬事萬物皆對象。 類是對象,類是java.lang.Class類的實例對象。 There is a class named Class 2)//Foo的實例對象如何表示 Foo foo1=new Foo();//foo1就表示出來了 //Foo這個類也是一個實例對象,Class類的實例對象,如何表示呢? //任何一個類都是Class的實例對象,這個實例對象有三種表示方式 //第一種表示方式--->實際在告訴我們任何一個類都有一個隱含的靜態成員變量class Class c1=Foo.class; //第二種表達方式--->已經知道該類的對象通過getClassF方法 Class c2=foo1.getClass(); //官網c1,c2表示了Foo類的類類型(class type),萬事萬物皆對象,類也是對象,是Class類的實例對象 //這個對象我們稱為該類的類類型 //不管c1 or c2都代表了Foo類的類類型,一個類只可能是Class類的一個實例對象 //第三種表達方式 Class c3=null; c3=Class.forName("com.imooc.reflect.Foo"); //我們完全可以通過類的類類型創建類的對象實例--->通過c1 or c2 or c3創建Foo的實例對象 Foo foo=(Foo)c1.newInstance();//需要有無參數的構造方法查看全部
-
方法的反射 方法的名稱和方法的參數列表才能夠唯一決定某一個方法 方法對象有invoke查看全部
-
想要獲得這個類的相關信息 首先需要獲得這個類的類類型 Object obj Class c = obj.getClass()查看全部
-
1.類的反射機制 1.-萬事萬物皆對象(除基本數據類型,java靜態的成員) -類對象,是java.lang.Class的實例對象 2.類對象的表示方法 1.Object.class //任何一個類都有一個隱含的靜態變量class 2.obj.getClass() //已知該類的對象,通過getClass方法 3.Class.forName("全類名")查看全部
-
基本數據類型 類里面的關鍵字都有類類型查看全部
-
Class c1 = double.class; double數據類型的字節碼表示方式(double數據類型) Class c2 = Double.class; Double類的類類型查看全部
-
Class.forName("類的全稱") --不僅僅代表類的類類型 還代表了動態加載類 --區分編譯 運行的區別 (要做到 用哪一個 就加載哪一個 不用不加載) new 類的實例對象 編譯時刻的靜態加載類 編譯時刻就需要加載所有可能使用到的類 但是其中有一個不存在或者錯誤 就無法編譯通過 instance 動態加載類 運行時刻 避免了 局部錯誤使得程序不能運行 Class.forName(“類名”) 返回的是加載類的類類型 動態加載類 在運行時刻 編譯時刻沒問題 通過類類型 創建該類的對象 類類型.newInstance() 但是此時無法保證通用 (今天用這個類類型 明天用那個類類型)為了確保能夠實現通用性 可以定義一個接口 讓自己的類去實現這個接口 接口.newInstance()查看全部
-
java反射機制 1 Class類反射 1.1 Class類 1)在在面向對象的世界里,萬事皆對象 java語言中,類是對象,類是java.lang.Class類的實例對象 2)類的實例的表示方式 第一種方式 Class c1 = Obj.Class; 第二種方式 Class c2 = obj.getClass(); 第三種方式 Class c3 = new Class.forName("包名+類名");查看全部
-
getDeclaredMethods public Method[] getDeclaredMethods() throws SecurityException返回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。...查看全部
-
public class MethodDemo4 { public static void main(String[] args) { ArrayList list = new ArrayList(); ArrayList<String> list1 = new ArrayList<String>(); list1.add("hello"); //list1.add(20);錯誤的 Class c1 = list.getClass(); Class c2 = list1.getClass(); System.out.println(c1 == c2); //反射的操作都是編譯之后的操作 /* * c1==c2結果返回true說明編譯之后集合的泛型是去泛型化的 * Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效, * 繞過編譯就無效了 * 驗證:我們可以通過方法的反射來操作,繞過編譯 */ try { Method m = c2.getMethod("add", Object.class); m.invoke(list1, 20);//繞過編譯操作就繞過了泛型 System.out.println(list1.size()); System.out.println(list1); /*for (String string : list1) { System.out.println(string); }*///現在不能這樣遍歷 } catch (Exception e) { e.printStackTrace(); } }查看全部
舉報
0/150
提交
取消