1.什么是注解?
對程序代碼本身的描述-代碼元數據,一種約定的規范,包括格式、意義、作用域等。
2.基本概念
- 注解對象:注解可以被用在包,類,方法,變量,參數上;
- 注解不會直接影響被注解的代碼,這只會向第三系統提供關於自己的信息以用於不同的需求;
- 注解會被編譯至class文件中,而且會在運行時被處理程序提取出來用於業務邏輯。當然,創建在運行時不可用的注解也是可能的,甚至可以創建只在源文件中可用,在編譯時不可用的注解。
3.程序如何使用注解?
利用被注解代碼並根據注解信息產生不同行為。
4.內建注解
Java語言自帶了一系列的注解。在本章中我們將闡述最重要的一部分。這個清單只涉及了Java語言最核心的包,未包含標准JRE中所有包和庫如JAXB或Servlet規范。
以下討論到的注解中有一些被稱之為Meta注解,它們的目的注解其他注解,並且包含關於其它注解的信息。
- @Retention:這個注解注在其他注解上,並用來說明如何存儲已被標記的注解。這是一種元注解,用來標記注解並提供注解的信息。可能的值是:
- SOURCE:表明這個注解會被編譯器忽略,並只會保留在源代碼中。
- CLASS:表明這個注解會通過編譯駐留在CLASS文件,但會被JVM在運行時忽略,正因為如此,其在運行時不可見。
- RUNTIME:表示這個注解會被JVM獲取,並在運行時通過反射獲取。
- @Target:這個注解用於限制某個元素可以被注解的類型。例如:
-
- ANNOTATION_TYPE 表示該注解可以應用到其他注解上
- CONSTRUCTOR 表示可以使用到構造器上
- FIELD 表示可以使用到域或屬性上
- LOCAL_VARIABLE表示可以使用到局部變量上。
- METHOD可以使用到方法級別的注解上。
- PACKAGE可以使用到包聲明上。
- PARAMETER可以使用到方法的參數上
- TYPE可以使用到一個類的任何元素上。
- @Documented:被注解的元素將會作為Javadoc產生的文檔中的內容。注解都默認不會成為成為文檔中的內容。這個注解可以對其它注解使用。
- @Inherited:在默認情況下,注解不會被子類繼承。被此注解標記的注解會被所有子類繼承。這個注解可以對類使用。
- @Deprecated:說明被標記的元素不應該再度使用。這個注解會讓編譯器產生警告消息。可以使用到方法,類和域上。相應的解釋和原因,包括另一個可取代的方法應該同時和這個注解使用。
- @SuppressWarnings:說明編譯器不會針對指定的一個或多個原因產生警告。例如:如果我們不想因為存在尚未使用的私有方法而得到警告可以這樣做:
-
1234
@SuppressWarnings
(
"unused"
)
private
String myNotUsedMethod(){
...
}
-
通常,編譯器會因為沒調用該方而產生警告; 用了注解抑制了這種行為。該注解需要一個或多個參數來指定抑制的警告類型。
- @Override:向編譯器說明被注解元素是重寫的父類的一個元素。在重寫父類元素的時候此注解並非強制性的,不過可以在重寫錯誤時幫助編譯器產生錯誤以提醒我們。比如子類方法的參數和父類不匹配,或返回值類型不同。
- @SafeVarargs:斷言方法或者構造器的代碼不會對參數進行不安全的操作。在Java的后續版本中,使用這個注解時將會令編譯器產生一個錯誤在編譯期間防止潛在的不安全操作。
-