1. 程式人生 > 遊戲 >一直索尼獨佔的《美職棒》新作登陸Xbox是索尼對微軟的信任

一直索尼獨佔的《美職棒》新作登陸Xbox是索尼對微軟的信任

目錄

本質上都一種資料型別,是一種介面型別

作用:

  • 生成幫助文件
  • 跟蹤程式碼依賴性,實現替代配置檔案功能,減少配置檔案數量
  • 在編譯時進行格式檢查。如把 @Override 註解放在方法前,如果這個方法並不是重寫了父類方法,則編譯時就能檢查出

到 Java 8 為止 Java SE 提供了 11 個內建註解.

基本註解

  • 其中有 5 個是基本註解,來自於 java.lang 包.
    • @Override
      • 指定方法重寫
    • @Deprecated
      • 註解類、介面、成員方法和成員變數等,用於表示某個元素(類、方法等)已過時. 當其他程式使用已過時的元素時,編譯器將會給出警告
    • @SuppressWarnings
      • 取消顯示編譯器警告
    • @SafeVarargs
    • @FunctionalInterface
      • 用來指定某個介面必須是函式式介面,所以 @FunInterface 只能修飾介面,不能修飾其它程式元素.
  • 有 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)和預設訪問許可權(預設不寫)。一個源程式檔案中可以宣告多個註解,但只能有一個是公有訪問許可權的註解。且源程式檔案命名和公有訪問許可權的註解名一致

  1. 不包含任何成員變數的註解稱為標記註解
  2. 元資料註解:包含成員變數的註解,可以在定義時定義預設值,也可在使用時賦值
public @interface MyTag {
    // 定義帶兩個成員變數的註解
    // 註解中的成員變數以方法的形式來定義
    String name();
    int age();
}