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 方法在 ...