-
功能性的類盡量使用動態加載而不使用靜態加載查看全部
-
new創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類。 使用Class.forName進行動態加載類,在運行時刻才會加載: Class c =Class.forName("Word"); 通過c.newInstance()來獲實例,獲得實例具體是哪個自行進行判斷,可以通過接口來實現復用。查看全部
-
萬事萬物皆對象,類也是對象,是Class類的實例對象查看全部
-
method包查看全部
-
資料2查看全部
-
資料1查看全部
-
new創建對象是靜態加載類,在編譯時刻就需要加載所有可能使用到的類查看全部
-
類是java.lang.Class類的實例對象。 //三種表示方法,任何一個類都有一個隱含的靜態成員變量class Class c1 = Foo.class; Class c2=fool.getClass(); Class c3 = Class.forName("com.imooc.foo"); //c1, c2都代表了Foo類的類類型,一個類只可能是Class類的一個對象 System.out.println(c1==c2);//true 可以通過類的類型來創建該類的對象。查看全部
-
類是對象,類是java.lang.Class類的實例對象查看全部
-
@Java反射機制——通過反射了解集合泛型的本質 1、反射的操作都是【編譯之后】的操作(因為編譯獲得class字節碼文件之后才能得到.class),即運行時操作 2、所以method.invoke()方法也是運行期運行,可以繞過編譯期。 二、驗證:對一個帶有泛型的數組添加不同于泛型的元素。 1、例如:List<String> list = new ArrayList<String>() 2、通過Method m = list.getClass().getMethod("add",Object.class);獲得list.add()方法的對象 3、m.invoke(list,"hello");m.invoke(list,1); 按理因為泛型的存在,不能添加整形"1"進去。因為invoke()是運行期操作,所以能夠通過編譯。 4、結果顯示,能夠插入"hello"和1,說明<>泛型只作用于編譯期,且只是為了規范輸入查看全部
-
@Java反射機制——方法反射的基本操作 一、如何獲取某個方法:方法的【名稱】和【方法的參數列表】才能【唯一確定】某個方法 1、要獲取一個類的某個方法,需要先得到類類型 2、通過Class.getMethod(name,parameterTypes)獲得public的該方法:如c.getMethod("print",new Class[]{int.class,int.class})或者參數寫成int,int; ——> 來獲取 public void print(int a,int b) 3、同樣getDeclaredMethod(name,paramterTypes)獲得自己聲明的該方法 二、方法的反射操作:method.invoke(對象,參數列表); 1、方法反射:通過調用方法的對象invoke(【對象】,參數列表),來操作定義該方法的【對象】,實現該方法 2、獲得方法的對象后,用對象method來進行方法調用Object o = method.invoke(c,new Object[]{10,20})也可以直接寫10,20。若方沒有返回值,則返回null。查看全部
-
@Java反射機制——獲取成員變量&構造函數 一、成員變量是java.lang.reflect.Field的對象 1、Field類封裝了關于成員變量的操作 2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息 3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息 4、field.getType()獲得成員類型的類類型 5、field.getName()獲得成員的名稱 二、構造函數是java.lang.Constructor類的對象 1、通過Class.getConstructor()獲得Constructor[]所有共有構造方法信息 2、建議getDeclaredConstructors()獲取自己聲明的構造犯法 3、Constructor.getName():String 4、Constructor.getParameterTypes():Class[]查看全部
-
@Java反射機制——獲取方法信息 一、基本的數據類型,void關鍵字等都存在類類型 Class c = 基類.class (int,String,double,void等) 二、Class類的基本API操作的 1、c.getName()可以獲取類的名稱 2、c.getSimpleName();//不包含包名的類的名稱 3、c.getMethods()獲取類的【public方法】集合,【包括繼承來的】 4、c.getDeclaredMethods()獲取的是所有該類【自己聲明】的方法,【不問訪問權限】 三、Method類提供了一些操作方法的方法 1、.getReturnType()得到該方法的返回值類型的類類型(class),如int.class String.class 2、.getName()得到方法的名稱 3、.getParameterTypes()獲得參數列表類型的類類型,如參數為(int,int)則得到(int.class ,int class)查看全部
-
@Java反射機制——動態加載類 1、靜態加載類,是編譯時刻加載;動態加載類,是運行時刻加載。 2、new創建對象:是靜態加載類,在編譯時刻就需要加載所有的【可能使用到的類】。有一個類有問題(如不存在),都不能通過編譯,會報錯。 3、Class.forName()通過動態加載類,可以用到一個類時,才進行加載。 【功能性的類盡量使用動態加載,并對新添的類實現功能性接口(標準),這樣就不用重新編譯】查看全部
-
@Java反射機制——Class類的使用 1.靜態的成員,普通數據類型不是對象 2.類是java.land.Class類的實例對象 3.任何一個類都是Class的實例對象,有三種表達方式 (1)Class c1 = 類名.class; (2)Class c2 = 類的實例對象.getClass(); (3)Class c3 = Class.forName(類名); 其中c1,c2,c3都是一樣的,即c1==c2.c1==c3,c2==c3;因為一個類只有一個類類型(class type) 4.通過類類型的newInstance()獲取類的實例對象;前提是該類有空參數的構造方法。查看全部
舉報
0/150
提交
取消