-
編譯時加載的類:靜態加載類(用new關鍵詞創建的類) 運行時加載的類:動態加載類(用類類型創建的類)(不過需要有接口或者父類(抽象類)) //Class.forName("類的全名") Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble) (c.newInstance());//需要有無參構造器 //OfficeAble 是接口(interface)查看全部
-
Class類 1)在面向對象的世界里,萬事萬物皆對象。 類是對象,類是java.lang.Class類的實例對象。 There is a class named Class 2)//Foo的實例對象如何表示 Foo foo1=new Foo();//foo1就表示出來了 //Foo這個類也是一個實例對象,Class類的實例對象,如何表示呢? //任何一個類都是Class的實例對象,這個實例對象有三種表示方式 //第一種表示方式--->實際在告訴我們任何一個類都有一個隱含的靜態成員變量class Class c1=Foo.class; //第二種表達方式--->已經知道該類的對象通過getClassF方法 Class c2=foo1.getClass(); //官網c1,c2表示了Foo類的類類型(class type),萬事萬物皆對象,類也是對象,是Class類的實例對象 //這個對象我們稱為該類的類類型 //不管c1 or c2都代表了Foo類的類類型,一個類只可能是Class類的一個實例對象 //第三種表達方式 Class c3=null; c3=Class.forName("com.imooc.reflect.Foo"); //我們完全可以通過類的類類型創建類的對象實例--->通過c1 or c2 or c3創建Foo的實例對象 Foo foo=(Foo)c1.newInstance();//需要有無參數的構造方法查看全部
-
1. 反射的操作都是編譯之后的操作。 2. Java中的泛型僅在編譯階段有效,(僅僅是防止編程錯誤的輸入)繞過編譯就無效了。 那就是說用反射可以使泛型無效(編譯之后是去泛型化的)查看全部
-
方法的反射: 1. 方法名稱加參數列表可以唯一確定一個方法 2. 通過方法對象來實現方法的功能,即把實例對象當成參數傳給方法對象 Here is an example: There is a class A: class A{void printInfo(String s1, String s2){System.out.println(s1 + s2);}} Implement the class: A a = new A(); Class c = a.getClass(); Method m = c.getMethod("printInfo", String.class, String.class); //getMethod方法只能獲得public方法 //getDeclaredMethod方法能獲得所有自己聲明的方法 //you can write the above code like following: Method m = c.getMethod("printInfo", new Object[]{String.class,String.class}); Object o = m.invoke(a, "Hello ", "World!");//Here, o = null //You can also write like: Object o = m.invoke(a, new Object[]{"Hello ","World!"}); //The above code just like: a.printInfo("Hello ","World!");查看全部
-
Class類實例化的三種表示方式...查看全部
-
獲取一個類的方法,就是要獲取一個類的信息; 而獲取一個類的信息,首先要獲取這個類的類類型查看全部
-
編譯時加載類是靜態加載類(一百個功能,如果有一個出錯,其他也不能用),運行時加載類是動態加載類(每個功能各不干擾,用接口去實現)查看全部
-
Class類查看全部
-
@try——catch...內容 //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); System.out.println("=================="); //獲取方法print(String,String) Method m1 = c.getMethod("print",String.class,String.class); //用方法進行反射操作 //a1.print("hello", "WORLD"); o = m1.invoke(a1, "hello","WORLD"); System.out.println("==================="); // Method m2 = c.getMethod("print", new Class[]{}); Method m2 = c.getMethod("print"); // m2.invoke(a1, new Object[]{}); m2.invoke(a1);查看全部
-
public class MethodDemo1 { public static void main(String[] args) { //要獲取print(int ,int )方法 1.要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1 = new A(); Class c = a1.getClass(); /* * 2.獲取方法 名稱和參數列表來決定 * getMethod獲取的是public的方法 * getDelcaredMethod自己聲明的方法 */ try { ... } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class A{ public void print(){ System.out.println("helloworld"); } public void print(int a,int b){ System.out.println(a+b); } public void print(String a,String b){ System.out.println(a.toUpperCase()+","+b.toLowerCase()); } }查看全部
-
這個Foo類是Class類的“對象”查看全部
-
只有java虛擬機才能創建Class對象查看全部
-
1) 基本的數據類型,void的關鍵字都有類類型 2) 方法是Method類的對象 3) Class類常用方法: getName(); getSimpleName(); getMethods(); getDeclaredMethods(); Method類常用方法: getReturnType(); getParametersType(); getName();查看全部
-
Class、Method反射都是在運行時執行,可以繞過編譯查看全部
-
方法的反射查看全部
舉報
0/150
提交
取消