-
類是對象1查看全部
-
@Java反射機制——動態加載類 1、靜態加載類,是編譯時刻加載;動態加載類,是運行時刻加載 2、new創建對象:是靜態加載類,在編譯時刻就需要加載所有的【可能使用到的類】。有一個類有問題(如不存在),都不能通過編譯,會報錯。 3、Class.forName()通過動態加載類,可以用到一個類時,才進行加載。 【功能性的類盡量使用動態加載,并對新添的類實現功能性接口(標準),這樣就不用重新編譯】查看全部
-
foo類的類類型,是說foo這個類的類型是Class類的對象,是Class類的實例對象,一個類只能是Class類的一個對象查看全部
-
得到Class的三種方法: ①Class c=Person.class; ②Class c=Person.getClass( ); ③Class c=forName(“包名 類名”); 動態加載類: Class c=forName(“包名 類名”); 靜態加載類: Person p=new Person( ); 得到類名的方法(先得到類的實例): c.getName( ); c.getSimperName( ); c.getMethods( );得到所有公開的方法包括父類繼承過來的方法。 c.getDeclaredMethods( );得到自己定義的方法。 得到方法后,對于方法有: m.getName( );得到方法名。 m.getReturnType( );得到返回值類型。 m.getParameterTypes( ); 得到參數列表的類型的類類型。 得到參數列表后,對于參數類型有: p.getName( );得到參數類型名。 對于類中的成員變量: Field[ ] fs=c.getFields( );得到所有公開聲明的成員變量。 c.getDeclaredFields( );得到所有自己聲明成員變量。 f.getType( ).getName( );得到成員的類型的類型名。 c.getConstructors( );得到所有公開的構造函數。 c.getDeclaredConstructors( );得到所有構造函數。 至于得到構造函數名和參數列表類似于方法的獲取。查看全部
-
方法的反射操作:A a1 = new A(); a1.print(10,20); Method m =c.getMethod("print",int.class.int.class);(c,代表這個類的類類型,m代表這個print方法的對象) //利用反射機制:利用這個print方法的對象信息來操作這個類的對象。 Object o = m.invoke(a1,new Object[]{10,20});(要try catch);查看全部
-
獲取方法的兩種形式::查看全部
-
獲取一個方法就是獲取類的信息,首先獲得這個類的類類型: 獲取方法:名稱和參數列表來決定。查看全部
-
以后如果在任意情況下想要獲取類的信息,那么首先要獲取這個類的類類型 可以獲取該對象對應類的成員變量的信息::public void getFied(Object obj){<br> 成員變量也是對象 java、lang.reflect.Field Field類封裝了關于成員變量的操作 Class c = obj.getClass;<br> Field[] fs = c.getFields();//c.getDeclaredField();<br> for(Field fd:fs){<br> Class fieldType = fd.getFledType;<br> System.out.println(fieldType.getName+" "fd.getName);<br> }<br> 2:獲取構造函數信息::成員變量實例 public static void printConMessage(Object obj){ Class c = obj.getClass(); /* * 構造函數也是對象 * java.lang. Constructor中封裝了構造函數的信息 * getConstructors獲取所有的public的構造函數 * getDeclaredConstructors得到所有的構造函數 */ //Constructor[] cs = c.getConstructors(); Constructor[] cs = c.getDeclaredConstructors(); for (Constructor constructor : cs) { System.out.print(constructor.getName()+"("); //獲取構造函數的參數列表--->得到的是參數列表的類類型 Class[] paramTypes = constructor.getParameterTypes(); for (Class class1 : paramTypes) { System.out.print(class1.getName()+","); } System.out.println(")"); }查看全部
-
通過new加載類屬于靜態加載類,在類編譯時就會加載需要使用的類,一個出現問題,就會編譯失敗。 Class.forName()為動態加載,可以通過接口統一標準,實現動態加載查看全部
-
Class的實例是每個類,稱為類類型。 通過類類型的newInstance()可以創建該實際,但必須有無參的構造方法。查看全部
-
編譯后的集合泛型去泛型化查看全部
-
得到Class的三種方法: ①Class c=Person.class; ②Class c=Person.getClass( ); ③Class c=forName(“包名 類名”); 動態加載類: Class c=forName(“包名 類名”); 靜態加載類: Person p=new Person( ); 得到類名的方法(先得到類的實例): c.getName( ); c.getSimperName( ); c.getMethods( );得到所有公開的方法包括父類繼承過來的方法。 c.getDeclaredMethods( );得到自己定義的方法。 得到方法后,對于方法有: m.getName( );得到方法名。 m.getReturnType( );得到返回值類型。 m.getParameterTypes( ); 得到參數列表的類型的類類型。 得到參數列表后,對于參數類型有: p.getName( );得到參數類型名。 對于類中的成員變量: Field[ ] fs=c.getFields( );得到所有公開聲明的成員變量。 c.getDeclaredFields( );得到所有自己聲明成員變量。 f.getType( ).getName( );得到成員的類型的類型名。 c.getConstructors( );得到所有公開的構造函數。 c.getDeclaredConstructors( );得到所有構造函數。 至于得到構造函數名和參數列表類似于方法的獲取。查看全部
-
反射操作都是編譯了之后的操作,編譯之后集合的泛型是去泛型化 的查看全部
-
到這里的筆記就截不了屏了查看全部
-
要想獲取類信息,首先要獲取類類型查看全部
舉報
0/150
提交
取消