Java基礎 -- 註解Annotation
註解的概念:
可以簡單的將註解理解為標籤(標籤裡面的內容就是註解內的元素),想釘在哪就釘在哪,比如:釘在型別上(類/介面/列舉),釘在類的資料成員上,釘在類的方法成員上,釘在方法的入參上,甚至釘在別的註解上等等。
官方下的註解含義為:註解是一系列元資料,它提供資料用來解釋程式程式碼,但是註解並非程式碼本身的一部分。註解對於程式碼的執行效果沒有直接影響。
註解有許多用處,主要如下:
- 提供資訊給編譯器: 編譯器可以利用註解來探測錯誤和警告資訊
- 編譯階段時的處理: 軟體/工具/框架可以讀取註解資訊來生成程式碼/Html文件或者其它處理
- 執行時的處理: 註解資訊可以在程式執行的時候被提取出來加以利用
註解的定義:
註解的定義是由 @interface 定義的一種類型別,是個語法糖。註解的超類都是java.lang.Annotation | |
註解定義的語法 | 註解定義的含義 |
@interface MyAnno1{ } | 無內容的註解 |
@interface MyAnno2{ int value(); } | 擁有單值元素的註解 |
@interface MyAnno3{ int value(); String name(); } |
擁有多個元素的註解 |
@interface MyAnno4{ int value() default 10 ; String name() default "anno" ; } |
擁有多個元素的註解, 某些元素可以攜帶預設值 |
@Retention(RetentionPolicy.RUNTIME) @interface MyAnno5{ } |
可以對自定義註解進行元注, 元註解是Java預留的,用來管控自定義註解的生態 |
元註解:我就簡單說它是元注,它是用來管控自定義註解的生態的。元注是java預留的,一共有5種。@Retention @Target @Documented @Inherited @Repeatable
元註解@Retention 管控自定義註解的保留期(/生命) | ||
元註解 | 元註解內的元素 | 元註解內的元素的作用, 自定義註解的生命 |
@Retention | RetentionPolicy.SOURCE | 程式碼階段, 作用:程式碼維護人員看看而已 |
RetentionPolicy.CLASS | 編譯階段, 作用:給其它工具/框架來使用 |
|
RetentionPolicy.RUNTIME | 執行階段, 作用:程式碼執行時可以提取自定義註解內容來消費 |
元註解@Target 管控自定義註解可以釘在哪裡 ( 預設:無@Target元注的自定義註解可以釘在任何地方 ) |
||
元註解 | 元註解內的元素 | 元註解內的元素的作用, 自定義註解可以釘在哪裡 |
@Target | ElementType.TYPE | 釘在型別(類/介面/列舉)上 |
ElementType.FIELD | 釘在類的資料成員上 | |
ElementType.METHOD | 釘在類的方法成員上 | |
ElementType.PARAMETER | 釘在方法的入參上 | |
ElementType.LOCAL_VARIABLE | 釘在方法的區域性變數上 | |
ElementType.CONSTRUCTOR | 釘在類的建構函式上 | |
ElementType.ANNOTATION_TYPE | 釘在別的註解上 | |
ElementType.PACKAGE | 釘在包上 |
元註解@Inherited 管控自定義註解可以被子類繼承 |
元註解@Documented 管控自定義註解種的內容可以用來製作JavaDoc文件 |
元註解@Repeatable 是jdk8才引入的,以上的四個元註解中的內容元素都是單值型別的,而@Repeatable中的元素是陣列型別的,並且該元素必須是個註解 | |
@interface Persons { //定義:容器
@Repeatable(Persons.class) //元注:Persons容器
@Person(role="artist") //程式碼中宣告註解 |
註解的用法:
註解的運用場景:
註解的小示例: