-
1.動態加載類:實在運行時編譯; 2.在動態加載時,創建對象時,不要直接加載,要寫一個接口,來統一類;查看全部
-
原來泛型是在編譯時進行的,怪不得在myeclipse中進行編碼時會提示錯誤呢。查看全部
-
## 通過反射了解集合泛型的本質 * 編譯之后集合的泛型是去泛型化的. * Java中集合的泛型,是繁殖輸入錯誤的,只在編譯階段有效,繞過編譯就無效了. * 可以通過方法反射來操作,繞過編譯. ``` java ArrayList<String> list = new ArrayList<String>(); Class class = list.getClass(); try{ Method m = class.getMethod("add", Object.class); m.invoke(list, 100); //繞過編譯操作,繞過了泛型. } catch (Exception e){ e.printStackTrace(); } ``` * 反射的操作都是在運行的時候操作的,全部繞過了編譯.查看全部
-
## 方法反射的基本操作 * 方法名稱 和 方法的參數列表才能位移決定某個方法. * 方法對象method的invoke(對象,參數列表)方法來進行反射. * 對于可變參數,可以直接列出,或者使用數組表示. * invoke函數 方法如果沒返回值,返回null;若有的花就返回具體返回值,需使用強制類型轉換.查看全部
-
## 獲取成員變量構造函數信息 * java.lang.reflect.Field類封裝了關于成員變量的操作. * getFields() 獲取所有public的成員變量的信息. * getDeclaredFields() 獲取該類自己聲明的成員變量信息. * getType() 獲取成員變量類型的類類型. * getName() 獲取成員變量的名稱. * java.lang.Constructor 中封裝了構造函數的信息. * getConstructor() 獲取所有public的構造函數. * getDeclaredConstructor() 獲取所有的構造函數. * getName() 獲取名稱 * getParameterTypes() 獲取參數列表變量的類類型.查看全部
-
## 獲取方法信息 * double.class 和 Double.class不同. * package不存在類類型,package不是在類里面聲明的.只要是在類里面聲明的都有類類型. * gatName() 獲取類的全稱. double.class是double, Double是java.lang.Double. * getSimpleName() 獲取不帶包名的名稱. Double是Double. * 方法是Method類的對象. * 獲取所有public函數(包括繼承來的)Method[] ms = c.getMethods(); * getDeclaredMethods() 獲取所有該類自己聲明的方法,不限訪問權限. * ms[i].getName() 獲取方法的名稱. * Class returnType = ms[i].getReturnType() 獲取方法返回值類型的類類型. * Class paramTypes = ms[i].getParameterTypes() 獲取參數列表的類的類類型.查看全部
-
## 動態加載類 * 編譯時加載類是靜態加載類,運行時刻加載類是動態加載類. * new 創建對象 是靜態加載類,在編譯的時候就需要加載所有可能使用到的類. * 在運行時加載,可以只在運行時加載,用哪個就加載哪個. * 用Class.forName()動態加載類,再用newInstance創建類對象,可以創建為Interface,然后相關的類實現接口就行. * 用動態加載,不需要重新編譯,直接動態的運行使用即可.有助于程序架構.查看全部
-
# 反射--java高級開發 ## Class類的使用 * java中靜態成員和普通數據類型(有對應的封裝類來彌補,比如Integer)不是對象. * 類也是對象,類是java.lang.Class類的實例對象. * //Constructor. Only the Java Virtual Machine creates Class objects. private CLass() {} * Class實例對象不能直接通過構造方法構造,以下是三種標示方法: Foo foo1 = new Foo(); 1. Class c1 = Foo.class; //任何一個類都有一個隱含的靜態成員變量class. 2. CLass c2 = foo1.getClass(); //c1, c2表示了Foo類的類類型(class type) 3. Class c3 = null; c3 = Class.forName("[className]") //會拋出ClassNotFoundException異常 * c1 == c2 == c3, 一個類只可能是Class類的一個實例對象. * 可以直接通過類的類類型創建該類的實例對象. Foo foo = (Foo) c1.newInstance(); //同樣會拋出異常,需要有無參數的構造方法查看全部
-
類是對象 是java.lang.class類的實例對象查看全部
-
類是對象, 類是java.lang.Class類的實例對象。 靜態成員、基本數據類型不是對象查看全部
-
動態加載類查看全部
-
反射繞過編譯,在運行時執行。靜態加載與動態加載查看全部
-
使用class.forName時,如果需要調用 則首先需要創建一個接口,讓需要的對象繼承他。然后.newInstance()實例化。 然后就可以用了。 功能型的類,盡量動態加載,而不是靜態加載查看全部
-
實例的實例查看全部
-
invoke 調用,喚起查看全部
舉報
0/150
提交
取消