反射和註解

2021-08-16 10:21:08 字數 1329 閱讀 2943

反射:通過乙個類的"類物件",可以使用它自身的方法,

來建立例項,呼叫成員

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 作用 用於描述註解的使用範圍 即 註解是描述...