反射:通過乙個類的"類物件",可以使用它自身的方法,
來建立例項,呼叫成員
1.獲得"類物件"
方法區中,載入所有的類,都是乙個class型別的物件
class.forname(string 類名) 類名為全稱
類名.class
物件.getclass()
2.反射建立例項
class c = class.forname(str);
object obj = c.newinstence();
通過執行無參構造方法,建立例項,
沒有無參構造方法,會出現異常
3.訪問成員變數
class c = ....;
f = c.getdeclaredfield(變數名);
得到成員變數,私有變數也可以得到,
得不到從父類繼承的變數
f.setaccessible(true);
使私有變數也可以訪問
f.set(物件,值)
為指定物件中的這個變數賦值
f.get(物件)
訪問指定物件中這個變數的值
靜態成員,給null值
4.呼叫方法:
m = c.getdeclaredmethod(方法名,引數型別列表);
獲得本類定義的方法,私有方法也能得到,但不能得到
繼承的方法
m.setaccessible(true);
設定私有方法也可以呼叫
r = m.invoke(obj,引數資料列表)
通過指定物件呼叫這個方法,並傳入具體的引數資料,
再的到它的返回值,沒有返回值,得到null
5.反射的作用
動態程式設計
程式執行流程中,執行的元件,執行方法,都可以通過動態
配置,進行替換
框架的基礎
servlet,spring,springmvc,mybatis框架都有
自己固定的執行流程,流程中的元件,使用xml或註解進行配置
註解不是程式邏輯的一部分,為其他開發工具,框架,提供**的
額外資訊
1.註解針對的目標類方法
成員變數
引數變數
2.註解保留範圍
原始碼註解資訊只保留原始碼中,編譯器編譯**是,會丟棄註解資訊
類在變異的類檔案中保留,這個類被載入到記憶體時,會丟棄註解資訊
記憶體(執行期)
在記憶體中保留,程式執行時,可以通過反射,來得到這些註解資訊
3.自定義註解
元註解,來對自定義註解進行註解
@target
指定註解的目標
@retention
指定保留範圍
反射和註解
類名.class 通過類名的屬性class獲取 物件.getclass getclass 方法在object類中定義著。結論 同乙個位元組碼檔案 class 在一次程式執行過程中,只會被載入一次,不論通過哪一種方式獲取的class物件都是同乙個。獲取功能 獲取成員變數們 獲取構造方法們 獲取成員方法...
註解和反射
1 annotation是從jdk5.0開始引入的新技術。2 annotation的作用 1 不是程式本身,可以對程式做出解釋 2 可以被其他程式 比如 編譯器等 讀取 3 annotaion的格式 1 註解是以 注釋名 在 中存在的,還可以新增一些引數值 例如 suppresswarnings v...
註解和反射使用
作用 註解是附加在 中的一些資訊,用於編譯 執行時解析和使用,起到說明配置作用 主要學習兩方面1 元註解,2 自定義註解 一 元註解 包括 1.target,2.retention 3.documented,4.inherited 幾種 1 target 作用 用於描述註解的使用範圍 即 註解是描述...