-
int.class表示int的類類型,String.class表示String類的類類型,void也有類類型,任何事物都是java.longg.Class的實例對象查看全部
-
反射的操作都是編譯之后的操作。 編譯之后集合的泛型時去泛型化的。 Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了。 可以通過方法的反射來操作,繞過泛型。查看全部
-
泛型 集合的泛型是為了防止你錯誤輸入的。 反射的操作都是編譯操作之后的操作,是在運行時的操作。 java中集合的泛型是為了防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了。 通過方法的反射操作可以繞過編譯,不受泛型的約束。 例如: ArrayList<String> list1 = new ArrayList<String>(); list.add("hello"); //成功 list.add(20); //失敗,類型不是String,會在編譯時檢驗 但是通過反射可以將20添加到list1列表中 method.invoke(list1,20);//此方法在運行時被加載,此時已經不再檢驗list1的泛型了。查看全部
-
獲取某一個方法的反射: 由方法名稱和方法的參數列表才能唯一地決定某個方法 使用method.invoke 1.要獲取類的信息,首先要獲取類的類類型。 A a = new A(); Class c = a.getClass(); 2.獲取方法對象,由名稱和參數列表決定 Method m = c.getMethod("print",new Class[]{int.class,int.class}); //或者 Method m = c.getMethod("print",int.class,int.class); //會獲取方法名稱為print,參數為兩個int類型的方法 //方法的反射操作,使用method.invoke(對象,參數列表),與一般的方法調用剛好相反 Object o = m.invoke(a,new Object[]{10,20}); //或者 Object o = m.invoke(a,new Object[]{10,20});查看全部
-
反射:獲取類的信息,包括類名,類成員變量,成員函數,構造方法等。 獲取類的成員變量的方法。 注意:萬物皆是對象 成員變量也是對象,是java.lang.reflect.Field的對象 Field[] fs= c.getFields(); Field[] fs1= c.getDeclaredFields(); Class filedType = fs1[i].getType();//得到成員變量的類類型 String fieldName = fs1[i].getName();//得到成員變量的名稱 打印對象構造函數的信息 // Constructor[] cons = c1.getConstructors(); Class ccon = cons[i].getParameterType();//得到構造函數的參數的類類型查看全部
-
靜態加載:編譯時加載,命令:javac 動態加載:運行時加載,命令:java 通過反射可以得到某個類的類型、返回值類型、參數類型、方法名等信息 所有的類都是Class的實例; 所有的方法都是Method的實例。 Class c = obj.getClass(); Method[] mths = c.getMethod(); //返回public類型的方法,包括繼承的方法 Method[] mths2 = c.getDeclaredMethod(); //返回自己聲明的方法,不考慮訪問權限 Class cm = mths[i].getReturnType();//獲得返回值的類類型 Class[] cp = mths[i].getParameterTypes();//獲得該方法的參數的類類型 mths[i].getName();//獲得該方法的方法名查看全部
-
new對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類。這樣會出現在多個功能的情況下,如果有其中任何一個有問題,在編譯時就會報錯,導致已經完成的功能不能使用。 解決方法是:采用動態加載的方法,Class.forName為動態加載,在程序執行的時候才加載 Class c1 = Class.forName(args[0]); OfficeAble oa = c1.newInstance(); oa.start(); 其中oa為Interface Interface OfficeAble{ public void start(); } class Word implements OfficeAble { public void start(){ System.out.println("word starts"); } } //功能性的類就盡量使用動態加載查看全部
-
任何一個類(用戶創建的,或者是JDK中的)都是java.lang.Class的實例對象。 例如:class A就是Class類的實例對象,其表示方式有: A a = new A(); (1)Class c1 = A.class; (2) Class c2 = a.getClass(); (3)Class c3 = Class.forName("com.xiong.A"); 其中c1==c2==c3. c1,c2,c3成為A的類類型,每一個類只有一個類類型,所以c1,c2,c3相等。 由類類型可以創建出該類的實例,如 A aa = c1.newInstance()//前提要求必須有無參的構造函數查看全部
-
類是對象,是class類的對象查看全部
-
想獲取類的信息,首先獲取類的類類型查看全部
-
功能性的類,使用動態加載查看全部
-
類也是對象,是java.lang.Class類的對象 這個對象成為該類的類類型查看全部
-
getMethods() getDeclaredMethods() getReturnType()獲取返回值類型的類類型查看全部
-
成員變量也是對象,Field類封裝了關于成員變量的操作 getFields()獲取多有public成員變量信息 getDeclaredFields獲取該類自己聲明的成員變量信息 構造函數也是對象 Constructor封裝了構造函數信息 getConstructors()獲取所有的public的構造函數 getDeclaredContructors得到所有的構造函數 (小技巧:for(XXX x : XXX){ }查看全部
-
可以通過方法的反射來操作,繞過編譯查看全部
舉報
0/150
提交
取消