閱讀951 返回首頁    go 阿裏雲 go 技術社區[雲棲]


JDK5新特性---注解學習筆記(一)

1.注解(也被稱為元數據):為我們在代碼中添加信息提供了一種形式化的方法,使我們可以在稍後某個時刻非常方便的使用這些數據。

 

2.  javaSE內置了3種標準注解:

@Override       表示當前的方法定義將覆蓋超類中的方法。如果你不小心拚寫錯誤,或者方法簽名對不上被覆蓋的方法,編譯器就會發出錯誤的提示。

@Deprecated   如果程序員使用了注解為它的元素,那麼編譯器會發出警告信息。

@SuppressWarnings   關閉不當的編譯器警告信息。

        在我們覆蓋父類中的方法時,最好使用@Override注解,這樣會避免出現一些未知錯誤,否則當你方法名稱或者方法簽名出現問題時,程序會將其處理為一個新的方法,而用了此注解以後,如果不小心出現了上述的錯誤,那麼編譯器將會給予提示,幫助我們正確的編碼。

        當我們使用了@Deprecated這一注解在我們所寫的方法時,編譯器將會發出警告,提示我們這個方法已經過時,樣式為在方法的名稱上出現橫線。

        @SuppressWarnings這個注解可以被理解成為壓製警告,當我們忘記使用泛型時,編譯器會給予警告,告訴我們還沒有確定類型,這個時候我們不想製定具體的泛型類型,也不想讓編譯器給予警告,那麼我們可以采用該注解來壓製警告,這個注解可以作用在方法級別上也可以做用在類級別上。

 

3.  注解元素:

     注解元素隻可以作用在以下類型:

     (1)8大基本數據類型

     (2)String類型

     (3)Class類型

     (4)enum類型

     (5)Annotation類型

     (6)以上類型的一維數組類型

如果你使用了其它的類型--包括包裝類型,那麼編譯器將會報錯。

4.  注解定義及元素定義

     (1)注解MyAnno1

package com.ty.annotation;

public @interface MyAnno1 {
 String name() default "wht";
 int age();
 Class<Person> person();
 Gender gender();
 int[] array();
}

    (2)注解MyAnno2

package com.ty.annotation;

public @interface MyAnno2 {
 String  value() ;
}

    (3)枚舉類型

package com.ty.annotation;

public enum Gender {
 MALE,FEMALE;
}

     (4)類類型

package com.ty.annotation;

public class Person {

}

    (5)測試使用注解

package com.ty.annotation;

public class Test {
 @MyAnno1(age=18,person=Person.class,gender=Gender.FEMALE,array={1,2,3})
 @MyAnno2("abc")

 public void testAnno(){
  
 }
}

注意的幾個問題:

1.  當注解的元素沒有默認值的時候,在使用的時候必須為其指定初始值

2.  如果注解元素有了初始值,那麼在使用的時候可以為其賦新的值,否則將使用默認值

3.  一個較為特殊的情況:注解元素當且僅當其隻有一個元素且名稱為value時,在使用該注解的時候為其賦值時可以不用寫屬性(元素)名稱

5.  元注解

     java內置了4種元注解,元注解負責注解其它的注解,可以理解成java中用來注解  Annotation的Annotation

    @Retention

       在描述這一屬性之前,先來說一下jav a文件的三個時期:  源文件時期(**.java)----->編譯器編譯期(***.class)----->jvm運行時期

      隻能用於修飾一個Annotation的定義,表示需要在什麼域級別上保存該注解的信息。通俗的說就是該注解保留在的作用域,其RetentionPolicy的參數包括:

      SOURCE    表示該注解隻作用於源代碼時期,最終將被編譯器所拋棄

      CLASS        表示該注解在class文件中可用,但是會被VM拋棄    --------->注解默認的作用域

      RUNTIME   表示該注解在VM運行時期也會被保留,因此可以通過反射機製來讀取注解的信息。

    @target

        表示該注解可以作用在什麼地方,可能的ElementType參數包括:

       CONSTRUCTOR:           構造器的聲明

       FIELD:                               字段的聲明(域聲明--包括enum實例)

       LOCAL_VARIABLE         局部變量的聲明

       MRTHOD                          方法聲明

       PACKAGE                        包聲明

       PARAMETER                   參數聲明

       TYPE                                 類、接口(包括注解類型)、或enum聲明

    @Documented

      表示該注解會被包含在javadoc中

    @Inherited

      表示該注解可以被繼承。詳細的說的就是一個注解@A在聲明時使用了@Inherited,那麼我們用@A作用於一個類的時候,當這個類被繼承時,子類也默認的帶有@A注解。

 

 

 

最後更新:2017-04-02 06:51:52

  上一篇:go Java 序列化的高級認識
  下一篇:go Android為Notification加上一個進度條