註解和反射
一、註解
英文:Annotation
1.1 註解的概念
註解也叫元資料,用來標記程式碼,描述資料,是有特殊意義的。
1.2 註解作用
1、Javadoc將文件註釋生成api文件時,會將一些註解內容生成到Api文件中,如 @return @see @param
2、編譯時進行格式檢查,如@Override
3、使用註解,減少配置檔案,如框架中。
4、抑制警告
1.3 四個內建註解
就是java寫好的註解,直接用。
@Override:標記重寫方法
@Deprecated:標記方法已過時,但是也可以用
@SuppressWarnings():抑制編譯器警告,可以抑制位元組結構體範圍內“{ }” 的警告,如eclipse中的黃線
@SafeVarargs:抑制堆汙染警告(單獨警告),如可變引數和泛型同時使用情況
1.4 四個元註解
在定義註解時,用於註解註解的註解
@Target:被標記的註解可以註解的位置
ElementType是列舉型別,位置有:
TYPE : 型別
FIELD : 欄位
METHOD : 普通方法
PARAMETER : 引數
CONSTRUCTOR : 可以標記構造方法
LOCAL_VARIABLE : 區域性變數
ANNOTATION_TYPE :可以標記在註解上面
PACKAGE :包
TYPE_PARAMETER 形式引數型別
TYPE_USE :哪裡都可以標記
@Retention:被標記的註解存在的生命週期
RetentionPolicy是列舉型別,生命週期有:
SOURCE: java原始碼.java檔案中可以存在
CLASS :編譯之後的位元組碼檔案中可以存在
RUNTIME :執行時編譯成位元組碼了,放入到jvm中了,這個註解還在
@Documented:被標記的註解生成文件時是否生成在文件中
@Inherited:被標記的註解在類繼承中是否被繼承
1.5 自定義註解
在以後的實際開發中,我們基本上不會自定義註解,都是用別人定義好的。我們自 定義的註解,如果沒有第三方程式(使用反射技術)的支援,是沒有任何意義的。
二、反射
英文:Reflect
2.1 面向物件再次理解
Java語言設計時,就是想將生活中的物件與物件之間的關係在計算機中體現,萬事萬物皆物件,而物件又可以分類即是類,類是描述物件的一個抽象模板,在程式設計時我們主要目的就是為了操作資料即是操作物件,資料型別即描述物件的就是類。
2.2 反射的概念
Java提供的一項技術,在執行時期動態的獲得一個類的屬性,方法,構造方法等,並且也可以修改這些東西(私有的也能獲得)。Class類就是描述類的型別,一個類只有一個類型別。
2.3 獲取位元組碼物件
物件.getClass();
類名.Class;
Class.forName(“類的全限定名”);
2.4 各種資料型別獲得位元組碼物件
基本資料型別
引用資料型別
介面
列舉
陣列
void
注意:1、基本資料型別的位元組碼物件也可以通過包裝型別.TYPE獲取
2、void的位元組碼也可以通過Void. TYPE獲取
2.5 獲得構造器
Constructor<T> getConstructor(Class<?>... parameterTypes) :獲得指定公共構造器
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) :獲得構造器(可是私有)
Constructor<?>[] getConstructors() :獲得所有公共構造器
Constructor<?>[] getDeclaredConstructors() :獲得所有構造器(包括私有)
2.6使用構造器建立物件
2.7使用反射技術寫註解描述注入物件
思路:通過反射獲取到欄位和註解,通過註解值獲取注入物件,將物件設定在欄位中。