Java 反射學習

2021-09-01 09:10:38 字數 2706 閱讀 1843

在學習之前有必要知道類載入器和例項物件(class和newinstance)的區別:

·這篇文章寫的蠻不錯的

1.通過反射建立物件

反射無參構造方法建立例項

class<

?> clazz = class.

forname

("類路徑");

//如:com.xx.***.類名

object o = clazz.

newinstance()

; system.out.

println

("通過無參構造方法反射例項化:"

+o.tostring()

);

反射帶參構造方法建立例項

class<

?> clazz = class.

forname

(calsspathname)

;//獲取string型別引數的構造方法

constructor<

?> constructor = clazz.

getconstructor

(string.

class);

//反射例項化帶string型別引數的構造方法

object o = constructor.

newinstance

("hairo");

system.out.

println

("通過帶參構造方法反射例項化:"

+o);

2.通過反射給成員變數賦值

class clazz

= class.

forname

(this

.classpathname)

;//建立類例項

object o = clazz.

newinstance()

;//獲取指定屬性名進行賦值 getfield(name);--不能獲取私有的屬性

field field = clazz.

getdeclaredfield

("name");

//因為屬性私有的所以必須開啟許可權才能操作

field.

setaccessible

(true);

//指定屬性名賦值 k-v

field.

set(o,

"反射設定私有name屬性的值");

//呼叫輸出方法-輸出null為賦值失敗

//指定方法名獲取show方法

method method =clazz.

getmethod

("show");

//呼叫show方法 o代表那個物件的show方法,

method.

invoke

(o);

3.反射獲取方法並呼叫

class<

?> clazz = class.

forname

(classpathname)

; object o = clazz.

newinstance()

;//獲取所有方法並執行

method[

] methods = clazz.

getdeclaredmethods()

;//獲取所有例項方法

for(method method : methods)

}

4.反射獲取註解

註解都是自定義的

01.獲取類上執行期間有效的註解

class clazz

= class.

forname

(classpathname)

;//獲取類上的所有執行期間有效的註解

annotation[

] annotations = clazz.

getannotations()

;for

(annotation annotation : annotations)

}

02.獲取屬性上的註解

class clazz

= class.

forname

(classpathname)

;//獲取所有屬性,包括private修飾的屬性

field[

] fields = clazz.

getdeclaredfields()

;for

(field field : fields)

else

}else

}

03.獲取方法上的註解

class clazz

= class.

forname

(classpathname)

;//獲取所有方法,包括private修飾的方法

method[

] methods = clazz.

getdeclaredmethods()

;for

(method method : methods)

Java反射學習

應用在一些通用性較高的 中 框架的底層基於反射 在框架開發中,都是基於配置檔案開發,在配置檔案中配置子類,可以通過反射得到類中的所有內容,可以讓類中的某個方法執行 類中的所有內容 屬性 沒有引數的構造方法 有引數的構造方法 普通方法,都可以通過反射機制動態獲得。那麼接下來就看看怎麼通過反射來獲得類中...

C 反射學習

using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using system.text u...

php 反射學習

早知道php 有反射的概念一直沒抽出空來。今天看書裡面有個這玩意 弄個例子搞搞。不過似乎專案中用處不大。印象中似乎就 thinkphp 3.1 裡面的 控制器呼叫使用了反射 class person public function set name value public function get...