Java反射 操作Constructor、Method、Field
前面已經介紹,通過反射獲取Class中各種元素
看之前一定要看連結裡獲取Class對應資訊,因為有很多混淆的獲取方法
本篇是簡單介紹通過
Constructor(構造器)建立物件
Method(方法)呼叫方法
Field(欄位)操作成員變數
Array(陣列)類動態建立、運算元組
一.Constructor建立物件
建立物件很簡單
獲取到Class clazz物件之後
通過clazz.getConstructor(Class<?>...parameterTypes) 獲取Constructor物件
呼叫Constructor物件的newInstance()即可獲得該類的例項
1.注意如果是指定引數的構造器 將指定引數的Class傳入即可
2.私有化的構造器無法訪問的情況下,可以呼叫Constructor物件的setAccessible(true) 表示取消訪問許可權檢查
二.Method呼叫方法
獲取clazz之後
通過clazz.getMethod(String methodName,Class<?>...parameterTypes) 獲取指定的Method物件
Method物件包含一個 Object invoke(Object obj,Object... args)
其中第一個obj 表示具體呼叫該方法的物件 的例項
第二個args表示具體呼叫該方法需要傳的實際引數
注意:私有化方法的問題按照 Constructor的處理辦法一樣即可
三.Field操作成員變數
通過clazz.getField(String fieldName)獲取指定的Field物件
Field有兩組方法操作成員變數
1.Xxx getXxx(Object obj) Xxx表示八種基本資料型別 / Object get() 表示不指定型別 返回Object物件
obj 表示從哪個物件來獲取欄位的值
2.setXxx(Object obj,Xxx value) Xxx同樣表示基本資料型別 / set(Object obj,Object value) 表示不指定value型別