反射基礎 框架設計的靈魂

2021-09-08 16:38:26 字數 2097 閱讀 2813

1. class.

forname

("全類名"

):將位元組碼檔案載入進記憶體,返回class物件

* 多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類

2. 類名.

class:通過類名的屬性class獲取

* 多用於引數的傳遞

3. 物件.

getclass

():getclass

()方法在object類中定義著。

* 多用於物件的獲取位元組碼的方式

* 結論:

同乙個位元組碼檔案(*.class)在一次程式執行過程中,只會被載入一次,不論通過哪一種方式獲取的class物件都是同乙個。

* class物件功能:

* 獲取功能:

1. 獲取成員變數們

* field[

]getfields

() :獲取所有public修飾的成員變數

* field getfield

(string name) 獲取指定名稱的 public修飾的成員變數

* field[

]getdeclaredfields

() 獲取所有的成員變數,不考慮修飾符

* field getdeclaredfield

(string name)

2. 獲取構造方法們

* constructor<

?>

getconstructors()

* constructor

getconstructor

(類<

?>..

. parametertypes)

* constructor

getdeclaredconstructor

(類<

?>..

. parametertypes)

* constructor<

?>

getdeclaredconstructors()

3. 獲取成員方法們:

* method[

]getmethods()

* method getmethod

(string name, 類<

?>..

. parametertypes)

* method[

]getdeclaredmethods()

* method getdeclaredmethod

(string name, 類<

?>..

. parametertypes)

4. 獲取全類名

* string getname

()

* field:成員變數

* 操作:

1. 設定值

*void

set(object obj, object value)

2. 獲取值

*get(object obj)

3. 忽略訪問許可權修飾符的安全檢查

*setaccessible

(true

):暴力反射

* constructor:構造方法

* 建立物件:

* t newinstance

(object.

.. initargs)

* 如果使用空引數構造方法建立物件,操作可以簡化:class物件的newinstance方法

* method:方法物件

* 執行方法:

* object invoke

(object obj, object.

.. args)

* 獲取方法名稱:

* string getname:獲取方法名

public

class

reflecttest

}

配置檔案

classname=類位址

methodname=類中的方法

反射 框架設計的靈魂

獲取class物件的方式 1.class.forname 全類名 將位元組碼檔案載入進記憶體,返回class物件 多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類 2.類名.class 通過類名的屬性class獲取 多用於引數的傳遞 3.物件.getclass getclass 方法在obj...

反射 框架設計的靈魂

可以在程式執行過程中,操作這些物件 可以解耦提高程式的可擴充套件性 class.forname 全類名 將位元組碼檔案載入進記憶體,返回class物件,多用於配置檔案,將類名定義在配置檔案中,讀取檔案,載入類 類名.class 通過類名的屬性class獲取,多用於引數的傳遞 物件.getclass ...

反射 框架設計的靈魂

獲取 class 物件的方式 1.class.forname 全類名 將位元組碼檔案載入進記憶體,返回class物件 多用於配置檔案,將類名定義在配置檔案中。讀取檔案,載入類 2.類名.class 通過類名的屬性class獲取 多用於引數的傳遞 3.物件.getclass getclass 方法在 ...