Java 注解


一、什么是Java注解:

  Java注解(Annotation),是Java代碼里的特殊標記,它為我們在代碼中添加用Java程序無法表達的額外信息提供了一種形式化的方法,使我們在未來可以方便的使用這些被注解修飾的程序元素(類、方法、變量)。

 

二、Java注解的作用:

  1、將由編譯器來測試和驗證的格式,存儲有關程序的額外信息。比如@Override,可以讓編譯器檢查子類中是否有重寫父類中的方法。

  2、生成描述性文件,甚至新的類定義。

  3、減輕編寫模板代碼的負擔。

  4、使代碼更加干凈易懂。

 

三、Java注解的分類:

     1、Java SE5內置了三種內建注解

     @Override,表示當前的方法定義將覆蓋超類中的方法。

     @Deprecated,使用了注解為它的元素編譯器將發出警告,因為注解@Deprecated是不贊成使用的代碼,被棄用的代碼。

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

 

  2、Java還提供了4種元注解

  用來修飾其他注解定義,這4個注解分別是@Taget、@Retention、@Decoumented、@Inherited。下面表格中說明4種注解的說明。

 

@Target

表示該注解可以用於什么地方,可能的ElementType參數有:

CONSTRUCTOR:構造器的聲明

FIELD:域聲明(包括enum實例)

LOCAL_VARIABLE:局部變量聲明

METHOD:方法聲明

PACKAGE:包聲明

PARAMETER:參數聲明

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

@Retention

表示需要在什么級別保存該注解信息。可選的RetentionPolicy參數包括:

SOURCE:注解將被編譯器丟棄

CLASS:注解在class文件中可用,但會被VM丟棄

RUNTIME:VM將在運行期間保留注解,因此可以通過反射機制讀取注解的信息。

@Document

將注解包含在Javadoc中

@Inherited

允許子類繼承父類中的注解

 

  3、自定義注解

  通過元注解,用戶自己編寫注解。例如下面代碼就是用戶定義的自定義注解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
 
}

  除了@符號,注解很像是一個接口。定義注解的時候需要用到元注解,上面用到了@Target和@RetentionPolicy,它們的含義在上面的表格中已近給出。 

  在注解中一般會有一些元素以表示某些值。注解的元素看起來就像接口的方法,唯一的區別在於可以為其制定默認值。沒有元素的注解稱為標記注解,上面的@Test就是一個標記注解。 

  注解的可用的類型包括以下幾種:所有基本類型、String、Class、enum、Annotation、以上類型的數組形式。元素不能有不確定的值,即要么有默認值,要么在使用注解的時候提供元素的值。而且元素不能使用null作為默認值。注解在只有一個元素且該元素的名稱是value的情況下,在使用注解的時候可以省略“value=”,直接寫需要的值即可。 

     下面看一個定義了元素的注解。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
    public String id();
    public String description() default "no description";
}

  定義了注解,必然要去使用注解。

public class PasswordUtils {
     @UseCase(id = 47, description = "Passwords must contain at least one numeric")
     public boolean validatePassword(String password) {
         return (password.matches("\\w*\\d\\w*"));
     }
 
     @UseCase(id = 48)
     public String encryptPassword(String password) {
         return new StringBuilder(password).reverse().toString();
     }
 }

  使用注解最主要的部分在於對注解的處理,那么就會涉及到注解處理器。

  從原理上講,注解處理器就是通過反射機制獲取被檢查方法上的注解信息,然后根據注解元素的值進行特定的處理。

Found Use Case:47 Passwords must contain at least one numeric

Found Use Case:48 no description

Warning: Missing use case-49

Warning: Missing use case-50

  上面的三段代碼結合起來是一個跟蹤項目中用例的簡單例子

 

四、注解和注釋的區別:

  注解與普通的注釋有一定的區別,也有一定的聯系。注解和注釋都屬於對代碼的描述,注釋的作用只是簡單的描述程序的信息,它不會被程序所讀取;而注解則是Java代碼中的特殊標記,這些標記可以在編譯、加載、運行時被讀取,並執行相應的處理。

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM