一直索尼獨佔的《美職棒》新作登陸Xbox是索尼對微軟的信任
阿新 • • 發佈:2021-06-21
目錄
本質上都一種資料型別,是一種介面型別
作用:
- 生成幫助文件
- 跟蹤程式碼依賴性,實現替代配置檔案功能,減少配置檔案數量
- 在編譯時進行格式檢查。如把 @Override 註解放在方法前,如果這個方法並不是重寫了父類方法,則編譯時就能檢查出
到 Java 8 為止 Java SE 提供了 11 個內建註解.
基本註解
- 其中有 5 個是基本註解,來自於 java.lang 包.
- @Override
- 指定方法重寫
- @Deprecated
- 註解類、介面、成員方法和成員變數等,用於表示某個元素(類、方法等)已過時. 當其他程式使用已過時的元素時,編譯器將會給出警告
- @SuppressWarnings
- 取消顯示編譯器警告
- @SafeVarargs
- @FunctionalInterface
- 用來指定某個介面必須是函式式介面,所以 @FunInterface 只能修飾介面,不能修飾其它程式元素.
- @Override
- 有 6 個是元註解,來自於 java.lang.annotation 包,自定義註解會用到元註解.
元註解
元註解就是負責註解其他的註解,負責對其它註解進行說明
-
@Documented
- @Documented 是一個標記註解,沒有成員變數。用 @Documented 註解修飾的註解類會被 JavaDoc 工具提取成文件。預設情況下,JavaDoc 是不包括註解的,但如果宣告註解時指定了 @Documented,就會被 JavaDoc 之類的工具處理,所以註解型別資訊就會被包括在生成的幫助文件中。
-
@Target
- 用來指定一個註解的使用範圍,即被 @Target 修飾的註解可以用在什麼地方。@Target 註解有一個成員變數(value)用來設定適用目標,value 是 java.lang.annotation.ElementType 列舉型別的陣列,下表為 ElementType 常用的列舉常量。
@Target({ElementType.TYPE}) public @interface MyTarget { } @MyTarget class Test { void myTest() { System.out.println("Hello"); } }
-
@Retention
-
用於描述註解的生命週期,也就是該註解被保留的時間長短。@Retention 註解中的成員變數(value)用來設定保留策略,value 是 java.lang.annotation.RetentionPolicy 列舉型別,RetentionPolicy 有 3 個列舉常量
- SOURCE:在原始檔中有效(即原始檔保留)
- CLASS:在 class 檔案中有效(即 class 保留)
- RUNTIME:在執行時有效(即執行時保留)
生命週期大小排序為 SOURCE < CLASS < RUNTIME,前者能使用的地方後者一定也能使用。如果需要在執行時去動態獲取註解資訊,那隻能用 RUNTIME 註解;如果要在編譯時進行一些預處理操作,比如生成一些輔助程式碼,就用 CLASS 註解;如果只是做一些檢查性的操作,比如 @Override 和 @SuppressWarnings,則可選用 SOURCE 註解。
@Retention(RetentionPolicy.RUNTIME)
-
-
@Inherited
- 標記註解,用來指定該註解可以被繼承。使用 @Inherited 註解的 Class 類,表示這個註解可以被用於該 Class 類的子類。就是說如果某個類使用了被 @Inherited 修飾的註解,則其子類將自動具有該註解
-
@Repeatable
- Java 8 新增加的,它允許在相同的程式元素中重複註解,在需要對同一種註解多次使用時,往往需要藉助 @Repeatable 註解。
-
@Native
- 使用 @Native 註解修飾成員變數,則表示這個變數可以被原生代碼引用,常常被程式碼生成工具使用
自定義註解
宣告自定義註解使用 @interface 關鍵字(interface 關鍵字前加 @ 符號)實現。定義註解與定義介面非常像
// 定義一個簡單的註解型別
public @interface Test {
}
預設情況下,註解可以在程式的任何地方使用,通常用於修飾類、介面、方法和變數等
定義註解和定義類相似,註解前面的訪問修飾符和類一樣有兩種,分別是公有訪問許可權(public)和預設訪問許可權(預設不寫)。一個源程式檔案中可以宣告多個註解,但只能有一個是公有訪問許可權的註解。且源程式檔案命名和公有訪問許可權的註解名一致
- 不包含任何成員變數的註解稱為標記註解
- 元資料註解:包含成員變數的註解,可以在定義時定義預設值,也可在使用時賦值
public @interface MyTag {
// 定義帶兩個成員變數的註解
// 註解中的成員變數以方法的形式來定義
String name();
int age();
}