Core Java 筆記(三) - 反射

Class類 - 運行時的類型標記

  • Class 對象表示一個特定類的屬性
Student student;
Class cl = student.getClass();
  • getName() 獲取類名
Student student;
Class cl = student.getClass();
String name = cl.getName();
  • Class 的靜態方法 forName() 獲得類名對應的Class對象
String className= "java.util.Date";
Class cl = Class.forName(className);
  • T.class 一個Class對象實際上表示的是一個類型,而這個類型未必一定是一種類。如 int 不是類,但int.Class 是一個Class 對象。
Class cl = int.class;
  • 虛擬機爲每一個類管理一個Class對象,所以 s.getClass() == Student.class 返回true。

  • newInstance() 創建對象。如 s.getClass().newInstance() 返回與 s 相同類型的 新的 Student 實例。(備註: 無參數構造器時使用, 如果需要使用帶參構造器,則用Constructor 中的 newInstance 方法)

利用反射分析類的能力

  • java.lang.reflect 包中有 Filed 、Method、Constructor 分別用於描述類的 域、方法、構造器。

  • Filed 、Method、Constructor都有 getName() 返回項目的名字。Filed 有getType() 方法返回描述域所屬類型的Class對象。Method、Constructor 有能夠報告參數類型的方法 getParameterTypes()。Method有getReturnType()獲取返回值類型。 三個都有 getModifiers()方法返回修飾符使用狀況。

  • getFileds() 、 getMethods()、 getConstructors() 返回這個類及其超類的所有公有域、方法、構造器。

  • getDeclaredFileds()、 getDeclaredMethods()、getDeclaredConstructors() 返回這個類或接口的全部方法,但是不包括其超類。

  • Method 的 invoke 方法 public Object invoke(Object implicitParameter, Object[] explicitParamenters)

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