1. 程式人生 > 其它 >JAVA反射reflect常用方法

JAVA反射reflect常用方法

Reflect筆記

基礎

結構資訊

  • Class c = Class.forname("類的名稱"); 從類的名稱建立類物件。
  • class.getName(); 獲得類的名稱 會帶上包名,例如com.java.test.App
  • class.getSimpleName(); 獲得類的簡單名稱,例如App
  • class.getInterfaces(); 獲得類的介面,是一個數組,可以通過Arrays.toString()輸出;
  • class.getModifers(); 獲得修飾符,得到一個代表修飾符的數字;
  • 可以通過Modifier.toString(數字) 得到字串,如public final

成員變數

  • Filed[] f = class.getFileds(); 獲取所有public屬性
  • class.getDeclaredFileds() 獲取所有許可權的屬性
  • f.getName 獲得屬性名字
  • f.getType 獲得屬性型別

構造方法

  • class.getConstructors() 所有構造方法
  • class.getDeclaredConstructors() 所有許可權的構造
  • class.getConstructor() 指定的構造方法
  • class.getDeclaredConstructor() 所有指定構造方法
  • 通過constructor.newInstance()
    構造新物件

成員方法

  • getMethods() 獲得所有方法
  • getname(); 獲得名字
  • getModifiers(); 獲得修飾符
  • getReturnTypes(); 獲得返回型別

操作

使用反射操作屬性(不安全)

  1. 獲取類的完整路徑字串
  2. 根據類的完整路徑獲得類物件
  3. 使用set(obj,值)進行對相應屬性的修改
  4. f.getXxx(obj) 獲得obj該屬性的值

使用Method執行方法

m.invoke(obj) 具有返回值
invoke 簡單點來說,就是將一個方法(method)運用到具體的類上

比如我有一個類Person,中間有屬性age
得到PersongetAge方法後
使用f.invoke(person_1,Object[])

來對這個具體的物件使用方法