-
任何一個類都是Class的實例對象,這個實例對象有3種表示方式 1.第一種 [實際在告訴我們任何一個類都有一個隱含的靜態成員變量class] Class c1 = 類名.class 2.第二種 [已經知道該類的對象,通過getClass方法] Foo foo1 = new Foo(); Class c2 = foo1.getClass(); 3.第三種(動態加載類) [該方法需要捕獲異常] Class c3 = null; c3 = Class.forName("com.imooc.reflect.Foo"); //類的全稱 ----------------------------------------------------------------- c1,c2表示Foo類的類類型 萬事萬物皆對象, 類也是對象,是Class類的實例對象 這個對象我們稱為該類的類類型 ---------------------------------------- c1 == c2 =====>true c2 == c3 =====>true 不管c1,c2都代表了Foo類的類類型,一個類只可能是Class類的一個實例對象 同時!我們還可以用類類型(c1,c2,c3)來創建該類的實例對象 方法如下:[需要捕獲異常] Foo foo = (Foo)c1.newInstance();//需要有無參數的構造方法查看全部
-
【類類型的含義:Foo類本身是Class類的實例對象=>[變量名為c1/c2],而Foo類本身又有實例對象foo1,所以c1,c2就為類類型】 class類里面有一個private Class(){}私有方法,所以類的實例不能new出來,只能有以下3種方式表示; 1.Class c1 = Foo.class;//實際在告訴我們,任何一個類都有一個隱含的靜態成員變量class 2.已結知道該類的對象(實例化對象)通過getClass方法可獲得 Foo foo1 = new Foo(); Class c2 = foo1.getClass(); 3.class c3 = class.forName("類的全稱"); ---------------------------------------------- 類是對象,類是java.lang.Class類的實例對象查看全部
-
int i = 5[普通數據類型] 靜態的東西屬于類而不屬于對象查看全部
-
1、靜態加載類,是編譯時刻加載;動態加載類,是運行時刻加載 2、new創建對象:是靜態加載類,在編譯時刻就需要加載所有的【可能使用到的類】。有一個類有問題(如不存在),都不能通過編譯,會報錯。 3、Class.forName()通過動態加載類,可以用到一個類時,才進行加載。 【功能性的類盡量使用動態加載,并對新添的類實現功能性接口(標準),這樣就不用重新編譯】 1.Clss.forName("類的全稱") 不僅表示了類的類類型,還代表了動態加載類 請大家區分編譯、運行 編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類查看全部
-
new創建對象 是靜態加載類 在編譯時刻就需要加載所有可能使用到的類 動態加載類可以用哪個就加載哪個 解決靜態加載的問題查看全部
-
Class.forName("類的全稱")不僅表示類的類類型,還代表了動態加載類; 編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類; new創建對象是靜態加載類,在編譯時刻就需要加載所有可能使用到的類;查看全部
-
1.靜態的成員,普通數據類型不是對象 2.類是java.lang.Class類的實例對象,這個對象表示這個類的類類型(class type) Class類的構造器是private的,所以我們不能創建Class的對象,只能由JVM來創建Class的對象。 (1)Class c1 = 類名.class;(說明每個類(對象)都有一個隱含的靜態成員變量class) (2)Class c2 = 類的實例對象.getClass(); (3)Class c3 = Class.forName(類名); 一個類只有一個類類型(class type) 4.可以通過類類型來獲取一個類的實例對象: c1.newInstance() c1是A類的類類型,創建出A類的對象(此處c1為Foo的類類型,創建出Foo類的一個實例對象),因此根據得出的結果需要做強制類型轉換(不加那個 Foo 類型是可以的 ?但是編譯器會報警告 ?提示這里 等號兩邊的 類型不一樣) 類名 類的實例對象名稱 = (類名)c1.newInstance();前提是該類有無參構造方法。查看全部
-
動態查看全部
-
反射的操作都是編譯之后的操作;就是運行階段 java中集合的泛型是防止錯誤輸入的;只在編譯階段有效,只要繞過編譯就無效查看全部
-
getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式 表示new Class[] Method m = c.getMethod("print", new Class[]{int.class,int.class}); Method m = c.getMethod("print", int.class,int.class); 方法的反射操作 a1.print(10, 20);方法的反射操作是用m對象來進行方法調用 和a1.print調用的效果完全相同 //方法如果沒有返回值返回null,有返回值返回具體的返回值 Object o = m.invoke(a1,new Object[]{10,20}); Object o = m.invoke(a1, 10,20);查看全部
-
成員變量是java.lang.reflect.Field的對象 Field[] fs = c.getFields()//獲取所有public的成員變量Field[]信息 c.getDeclaredFields()//獲取的是該類自己聲明的成員變量信息 field.getType()//獲得成員類型的類類型 field.getName()//獲得成員的名稱 構造函數是java.lang.Constructor類的對象 Class.getConstructor()//獲得Constructor[]所有公有構造方法信息 getDeclaredConstructors()//獲取自己聲明的構造方法 Constructor.getName()//獲取構造函數的名字 Constructor.getParameterTypes()//獲取構造函數的參數列表,得到的是參數列表的類類型查看全部
-
Method類,方法對象, 一個成員方法就是一個Method對象 getMethods()方法獲取的是所有public函數,包括父類繼承而來的 getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限 Method[] ms=c.getMethods();//c.getDeclaredMethods(); //得到方法的返回值類型的類類型 Class returnType=ms[i].getReturnType(); //獲取參數類型-->得到的是參數列表的類型的類類型 Class[] paramType=ms[i].getParameterTypes();查看全部
-
Class.forName("類的全稱")不僅表示類的類類型,還代表了動態加載類; 編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類; new創建對象是靜態加載類,在編譯時刻就需要加載所有可能使用到的類;查看全部
-
1.靜態的成員,普通數據類型不是對象 2.類是java.land.Class類的實例對象,這個對象表示這個類的類類型(class type) (1)Class c1 = 類名.class;(說明每個類都有一個隱含的靜態成變量class) (2)Class c2 = 類的實例對象.getClass(); (3)Class c3 = Class.forName(類名); 一個類只有一個類類型(class type) 4.可以通過類類型來獲取一個類的實例對象:類名 類的實例對象名稱 = (類名)c1.newInstance();前提是該類有無參構造方法。查看全部
-
動態加載查看全部
舉報
0/150
提交
取消