java基礎-注釋,java基礎注釋

來源:互聯網
上載者:User

java基礎-注釋,java基礎注釋

  注釋是一種形式的中繼資料,提供了非程式自身的資料,注釋對於被注釋的代碼沒有直接的影響。

  本文主要概括注釋的使用,java平台(SE)預定義的注釋,類型注釋是如跟可插入類型系統連用達到更強的類型檢查的,以及如何?重複注釋。

  注釋有許多用途,包括:

  • 為編譯器提供資訊--編譯器可以利用注釋檢查錯誤或者抑制警告資訊
  • 編譯時間或者部署時處理--軟體工具可以處理注釋並產生代碼,XML檔案等等
  • 運行時處理--有些注釋在運行時可以被檢測到
注釋格式

  注釋最簡單的形式如下:

@Entity

  @符號提示編譯器接下來的詞是一個注釋,樣本中注釋為Entity,注釋中可以包含元素,元素可以是命名的也可以是未命名的,如果注釋中僅有一個元素,則元素名稱可以省略,如果注釋中不含元素,則圓括弧可以省略,可以在一個聲明中使用多個注釋,java8中可以允許使用多個相同名稱的注釋,又叫重複注釋:

//注釋中包含元素@Author(   name = "Benjamin Franklin",   date = "3/27/2003")class MyClass() { //注釋中只有一個元素,則名稱可省略@SuppressWarnings("unchecked")void myMethod() { ... }//... }
注釋使用的位置

  注釋可以應用於聲明中,包括類,欄位,方法和其他變成元素的聲明。一般情況下,每個注釋佔用一行。

  java8 以後,注釋也可以在類型使用的使用的時候應用,如下所示:

//類執行個體床架運算式        new @Interned MyObject();//類型轉化        myString = (@NonNull String) str;//實現短語        class UnmodifiableList<T> implements            @Readonly List<@Readonly T> { ... }//拋出異常聲明        void monitorTemperature() throws            @Critical TemperatureException { ... }

  所有注釋的形式叫做類型注釋。

聲明注釋

  注釋的聲明樣本:

@interface ClassPreamble {   String author();   String date();
 int currentRevision() default 1;
}

  注釋的定義類似於介面,只不過interface關鍵詞前有@符號,實際上注釋類型是一種形式介面,注釋的主體定義包含了注釋的元素宣告,元素可以有預設值,添加預設值的方法就是在元素宣告後跟上default關鍵詞以及預設值,如上例子所示。

預定義注釋類型

  java se API中預定義了多個注釋類型,其中有一些是被java編譯器用的,有一些是應用與其他注釋的。

java語言使用的注釋

  在java.lang包中預定義的注釋類型有@Deprecated,@Override和SupressWarning。

  @Deprecated提示所注釋的元素已經棄用,不應該再使用。當一個被@Deprecated注釋所注釋的方法,類或者欄位被使用時,編譯器將產生警告資訊。當決定要棄用一個元素時,也應該在javadoc中體現,利用javadoc的@deprecated標籤,如下例所示,javadoc標籤以小寫字母開頭:

   // Javadoc此處寫javadoc注釋    /**     * @deprecated     * explanation of why it was deprecated     */    @Deprecated    static void deprecatedMethod() { }}

 

  @Override注釋用於通知編譯器該注釋所注釋的方法將覆寫父類中的方法,當然,覆寫方法不需要用@Override注釋,@Override注釋的使用能減少錯誤,如方法名稱拼字錯誤,如果沒有成功覆寫方法,則編譯器將產生錯誤。

  @SuppressWarnings注釋通知編譯器抑制指定的錯誤資訊的產生,每條錯誤資訊都屬於一個類型,java語言說明書中列出了兩種錯誤資訊:deprecation和unchecked。

  @SafeVarargs(java7及以後)注釋應用於方法或者構造器上,使用注釋時,含有可變變數的方法或者構造器將不會因為對可變變數的可能不安全的操作產生unchecked警告資訊。

  @FunctionalInterface注釋在java8中引入,使用該注釋表明被注釋的介面為功能介面。 

其他注釋使用的注釋

  被用於其他注釋的注釋叫做元注釋(meta-annotations),java.lang.annotation中有多個元注釋。

  @Retention注釋指定如何儲存標記的注釋:

  • RetentionPolicy.SOURCE – 標記的注釋僅僅保留在原始碼層,被編譯器忽略
  • RetentionPolicy.CLASS – 標記的注釋在編譯時間被保留,但是會被java虛擬機器忽略
  • RetentionPolicy.RUNTIME – 標記的注釋在java虛擬機器中保留,但是在運行時被忽略

  @Documented注釋提示指定的注釋在使用時也應該使用javadoc工具撰寫文檔。

  @Target注釋用來限制標記的注釋所使用的對象,該注釋指定以下元素類型中的一個作為其值:

  • ElementType.ANNOTATION_TYPE 能應用於一個注釋
  • ElementType.CONSTRUCTOR 能應用於一個構造器
  • ElementType.FIELD 能應用與一個注釋或者屬性
  • ElementType.LOCAL_VARIABLE 能應用於一個局部變數
  • ElementType.METHOD 能應用於方法層的注釋
  • ElementType.PACKAGE 能應用於包聲明
  • ElementType.PARAMETER 能應用於一個方法的參數
  • ElementType.TYPE 能應用於一個類

  @Inherited注釋提示標記的注釋類型可以從超類繼承(預設不能繼承),當使用者未檢索到該類型的注釋時,將在其父類中檢索該注釋,該注釋僅能在類的聲明中使用。

  @Repeatable注釋是從java8開始引入的,提示標記的類型可以對同一個元素使用多次。

類型注釋和可插入類型系統

  java8以前,注釋只能用在聲明當中,java8以後,注釋可以應用於任何類使用的地方,比如類執行個體的建立運算式(new),轉化(cast),實現子句以及拋出子句(以上注釋的使用位置已舉例)。

  類型注釋的常見可用於支援改進的類型檢查的java編程方式的分析。java8 SE自身並沒有提供類型檢查的架構,但你可以編寫或者是下載一個由一個或多個用於結合java編譯器的模組而實現的類型檢查架構,如華盛頓大學編寫的檢查架構Checker Framework。

檢索注釋

  Reflection API中由多個方法可以用來檢索注釋,返回單個注釋的方法,如AnnotatedElement.getAnnotationByType(Class<T>),其行為沒有發生改變,java8以後,由於可以重複使用一個類型的注釋,由於相容的原因,重複的注釋是儲存在一個筆記方塊內的,由java編譯器自動產生,因此當有重複注釋時,可先獲得多個注釋的筆記方塊,這樣傳統返回單個注釋的方法照樣可以使用。java8也引入了一個可以一次返回多個注釋的方法,如AnnotatedElement.getAnnotations(Class<T>)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.