>[success] # java 元注解
1. 元注解是可以**注解到注解上的注解**,或者說**元注解是一種基本注解**,但是它能夠應用到其它的注解上面。
2. 元注解主要有 **@Retention、@Documented、@Target、@Inherited、@Repeatable**。
>[danger] ##### @Retention
1. RetentionPolicy.SOURCE 注解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視。
2. RetentionPolicy.CLASS 注解只被保留到編譯進行的時候,它并不會被加載到 JVM 中,默認方式。
3. RetentionPolicy.RUNTIME 注解可以保留到程序運行的時候,它會被加載進入到 JVM 中,所以在程序運行時可以獲取到它們。
~~~
import java.lang.annotation.*;
//@Retention(RetentionPolicy.SOURCE) // 表示下面的注解在源代碼中有效
//@Retention(RetentionPolicy.CLASS) // 表示下面的注解在字節碼文件中有效,默認方式(不寫)
@Retention(RetentionPolicy.RUNTIME) // 表示下面的注解在運行時有效
public @interface MyAnnotation {
}
~~~
>[danger] ##### @Documented
1. 使用javadoc工具可以從程序源代碼中抽取類、方法、成員等注釋形成一個和源代碼配套的API幫助文檔,而該工具抽取時默認不包括注解內容。
2. @Documented用于指定被該注解將被javadoc工具提取成文檔。
3. 定義為@Documented的注解必須設置Retention值為RUNTIME。
~~~
@Documented // 表示下面的注解信息可以被javadoc工具提取到API文檔中,很少使用
public @interface MyAnnotation {
}
~~~
>[danger] ##### @Target
| 類型 |作用 |
| --- | --- |
| ElementType.ANNOTATION_TYPE| 可以給一個注解進行注解|
| ElementType.CONSTRUCTOR | 可以給構造方法進行注解|
| ElementType.FIELD | 可以給屬性進行注解|
| ElementType.LOCAL_VARIABLE | 可以給局部變量進行注解|
| ElementType.METHOD | 可以給方法進行注解|
| ElementType.PACKAGE| 可以給一個包進行注解|
| ElementType.PARAMETER | 可以給一個方法內的參數進行注解|
| ElementType.TYPE | 可以給類型進行注解,比如類、接口、枚舉|
~~~
// 表示下面的注解可以用于類型、構造方法、成員變量、成員方法、參數 的修飾
@Target({ ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER })
public @interface MyAnnotation {
}
~~~
>[danger] ##### @Inherited
1. **@Inherited**并不是說注解本身可以繼承,而是說如果一個超類被該注解標記過的注解進行注解時,如果子類沒有被任何注解應用時,則子類就繼承超類的注解
>[danger] ##### @Repeatable
1. 可以重復使用同一個注解
* 正常重復使用一個注解會報錯

* 解決一可以聲明一個數組類型注解(java8 之前解決方案)
~~~
public @interface MyAnnotation {
public String value();
}
~~~
~~~
public @interface MyAnnotations {
public MyAnnotation[] value();
}
~~~
~~~
@MyAnnotations({ @MyAnnotation(value = "1"), @MyAnnotation(value = "2") })
public class TestAnnotation {
int a = 1;
}
~~~
* java 8之后解決
~~~
public @interface MyAnnotations {
public MyAnnotation[] value();
}
~~~
~~~
import java.lang.annotation.*;
@Repeatable(value = MyAnnotations.class)
public @interface MyAnnotation {
public String value();
}
~~~
~~~
@MyAnnotation(value = "1")
@MyAnnotation(value = "2")
public class TestAnnotation {
int a = 1;
}
~~~
>[danger] ##### 其他
| 名稱 | 作用 |
| --- | --- |
|@author |標明開發該類模塊的作者,多個作者之間使用,分割|
|@version| 標明該類模塊的版本|
|@see |參考轉向,也就是相關主題|
|@since |從哪個版本開始增加的|
|@param |對方法中某參數的說明,如果沒有參數就不能寫|
|@return| 對方法返回值的說明,如果方法的返回值類型是void就不能寫|
|@exception |對方法可能拋出的異常進行說明|
|@Override |限定重寫父類方法, 該注解只能用于方法|
|@Deprecated |用于表示所修飾的元素(類, 方法等)已過時|
|@SuppressWarnings| 抑制編譯器警告|
- windows -- 環境變量
- Vscode -- 編寫java
- 初始java
- java -- 關鍵字
- 編寫第一個java程序
- java -- 注釋
- 計算機存儲 -- 進制
- java -- 類型
- java -- 變量
- 數字類型
- 布爾類型
- 字符類型
- 類型轉換
- 雙等比較是什么
- java -- 運算符
- 算數運算符
- 字符串拼接
- 關系/比較運算符
- 自增減運算符
- 邏輯運算符
- 三目運算
- 賦值運算符
- 移位運算符
- 位運算符
- 運算符優先級
- java -- 流程控制語句
- if /else if /if -- 判斷
- switch case分支結構
- for -- 循環
- 用雙重for循環
- while -- 循環
- do while -- 循環
- 案例練習
- java -- 數組
- 數組的存儲
- 數組的增刪改查
- 數組的特點
- 數組案例
- 二維數組
- 數組的工具方法
- java -- 方法
- java -- 方法的重載
- java -- 方法的調用流程
- java -- 類方法傳參注意事項
- java -- 方法練習案例
- 對比 return break continue
- for each循環
- java -- 基礎練習
- java -- 面向對象
- java -- 創建類和對象
- java -- 訪問控制符
- java -- 類成員方法
- java -- 構造方法
- java -- this
- java -- 封裝
- java -- 對象內存圖
- java -- 創建對象案例
- java -- static
- java -- 繼承
- super -- 關鍵字
- java -- 構造塊和靜態代碼塊
- java -- 重寫
- java -- final
- java -- 多態
- java -- 抽象類
- java -- 接口
- 引用類型數據轉換
- 綜合案例
- java -- 內部類
- java -- 回調模式
- java -- 枚舉類型
- java -- switch 使用枚舉
- java -- 枚舉方法使用
- java -- 枚舉類實現接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 遞歸練習
- java -- 設計模式
- 單例模式
- java -- 注解
- java -- 元注解
- Java -- 核心類庫
- java -- 處理字符串
- Java -- String
- String -- 常用方法
- String -- 正則
- Java -- StringBuilder 和 StringBuffer
- 知識點
- Java -- StringJoiner 字符串拼接
- 練習題
- 字符串的總結
- Java -- 包裝類
- Integer
- Double
- Boolean
- Character
- java -- 集合類
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 獲取當前時間戳
- Java -- 異常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法