1. 程式人生 > >Java反射 操作Constructor、Method、Field

Java反射 操作Constructor、Method、Field

前面已經介紹,通過反射獲取Class中各種元素

連結:Java反射 獲取Class及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型別