黑馬程序員---java基礎加強---jdk1.5新特性之註解

----------- android培訓java培訓、java學習型技術博客、期待與您交流! -----------

註解(Annotation ) 是JDK 1.5 的新特性,現已應用於Spring , EJB ,JPA... 使用註解是一種趨勢。它可以用於創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。註釋是以‘@註釋名’在代碼中存在的,根據註釋參數的個數,我們可以將註釋分爲:標記註釋、單值註釋、完整註釋三類。它們都不會直接影響到程序的語義,只是作爲註釋(標識)存在,我們可以通過反射機制編程實現對這些元數據的訪問。另外,你可以在編譯時選擇代碼裏的註釋是否只存在於源代碼級,或者它也能在class文件中出現。

註解是向編譯器或工具軟件傳達一種信息,相當於是一種標記,加了註解就等於打上了某種標記,沒加,則等於沒有某種標記,以後,javac編譯器,開發工具或其它程序可以用反射來了解你的類及各種元素上有無何種標記,看你有什麼標記,就去幹相應的事情。標記可以加在包,類,字段,方法,方法的參數以及局部變量上。

註解的語法可以看Java語言規範瞭解,即Java的language specification 。

註解的語法比較簡單,除了@符號的使用以外,它基本上與java的固有語法一致,java內置了三種最基本的註解,定義在java.lang包中。

註解的應用結構圖
        步驟1:註解類
                @interface A
                {
                }
        步驟2:應用了註解類的類
                @A
                Class B
                {

                }
        步驟3:對“應用了註解類的類”進行反射操作的類
                Class C
                {
                        B.class.isAnnotionPresent(A.class);
                        A a = B.class.getAnnotion(A.class);
                }
註解類三個生命週期:
        源文件:@Retention(RetentionPolicy.SOURCE)      
        .class階段 : @Retention(RetentionPolicy.CLASS)      
        內存運行:@Retention(RetentionPolicy.RUNTIME)
因此在使用時可以明確該註解類的生命週期在哪兒,默認是.class階段

@Override  表示當前方法是覆蓋父類的方法。

@Deprecated  表示當前元素是不贊成使用的。

@SuppressWarnings 表示關閉一些不當的編譯器警告信息。{ 

     @SuppressWarnings,其參數有:

      deprecation,使用了過時的類或方法時的警告

      unchecked,執行了未檢查的轉換時的警告

      fallthrough,當 Switch 程序塊直接通往下一種情況而沒有 Break 時的警告

      path,在類路徑、源文件路徑等中有不存在的路徑時的警告

      serial,當在可序列化的類上缺少 serialVersionUID 定義時的警告

      finally ,任何 finally 子句不能正常完成時的警告

      all,關於以上所有情況的警告

 }




元註解@Target,@Retention,@Documented,@Inherited (元註解指的是註解中的註解)
   
      @Target 表示該註解用於什麼地方,可能的 ElemenetType 參數包括: 
          ElemenetType.CONSTRUCTOR 構造器聲明 
          ElemenetType.FIELD 域聲明(包括 enum 實例) 
          ElemenetType.LOCAL_VARIABLE 局部變量聲明 
          ElemenetType.METHOD 方法聲明 
          ElemenetType.PACKAGE 包聲明 
          ElemenetType.PARAMETER 參數聲明 
          ElemenetType.TYPE 類,接口(包括註解類型)或enum聲明 
           
      @Retention 表示在什麼級別保存該註解信息。可選的 RetentionPolicy 參數包括: 
          RetentionPolicy.SOURCE 註解將被編譯器丟棄 
          RetentionPolicy.CLASS 註解在class文件中可用,但會被VM丟棄 
          RetentionPolicy.RUNTIME VM將在運行期也保留註釋,因此可以通過反射機制讀取註解的信息。 
           
      @Documented 將此註解包含在 javadoc 中 
       
      @Inherited 允許子類繼承父類中的註解 

自定義註解:

它類似於新創建一個接口類文件,但爲了區分,我們需要將它聲明爲@interface

爲自定義註釋添加變量



爲註解添加高級屬性

1數組類型的屬性

int[] arrayAttr() defaule{1.,2,3}

@MyAnnotation(arrayAttr={1,4,5})

如果數組屬性中只有一個元素,這時候屬性值部分可以省略大括號

2枚舉類型的屬性

Enumtest.TrafficLamp lamp()

@MyAnnotation(lamp = EumTest.trafilcLamp.GREEN)

3註解類型的屬性

MetaAnnotation  annotationAtrr() default @MtaAnnotation("xxx")



----------- android培訓java培訓、java學習型技術博客、期待與您交流! -----------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章