Java的反射機制(1)-反射功能的基本介紹

參考網址:
http://my.oschina.net/u/1407116/blog/209417
http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

在此之前需瞭解的背景知識:
Class類:
     Class的實例表示正在運行的類和接口,基本的數據類型(boolean, byte, char, short, int, long, float, double)以及void也比表示Class對象。

Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的。(不能直接new出來)

重要方法:
     newInstance():創建此Class對象所表示的類的一個對象並返回。只能使用在默認的構造方法中。一定要自己定義無參的構造函數。
     getName():以String的形式返回此Class對象所表示的實體(類、接口、數組類、基本類型或void)名稱。          
     forName():返回與帶有給定字符串名的類或接口相關聯的Class對象,Class的靜態方法。

代碼:
//直接將People類賦值
Class<?> demo1 = People.class;
//調用Class的靜態方法forName,返回一個People,即Class的對象
Class<?> demo2 = Class.forName("www.baidu.com.People");
//通過實例的getClass()方法獲取類,賦值給Class
People people = new People();
Class<?> demo3 = people.getClass();

People mPeople = null;
mPeople = (People)demo1.newInstance();

Class<People> demo4 = People.class;
People people2 = null;
people2 = demo4.newInstance();

//demo4中應用了泛型。

這邊比較亂,畫了個圖:



反射機制:
Java反射機制主要提供了以下功能: 在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調用任意一個對象的方法;生成動態代理。

反射使用:
     Method是反射最基本的一個類。
     getMethod(String name, Class<T>…parameterTypes):返回一個Method對象,它反映此Class對象所表示的類或接口的指定公共成員方法。
     invoke(Object obj, Object… agrs):對帶有指定參數的指定對象調用由此 Method 對象表示的底層方法。

代碼:
Method method[] = demo4.getMethods();
     System.out.println(method[0]);
     System.out.println(method[1]);

輸出: public java.lang.String www.baidu.com.People.getAge()
      public void www.baidu.com.People.setAge(java.lang.String)

Method myMethod = demo4.getMethod("sayHi");
myMethod.invoke(demo4.newInstance());

輸出:
HelloWorld!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章