//註解的定義,至關於建立了一個名字爲Frozen的標籤 public @interface Frozen{}
上面咱們定義了一個註解標籤
下面咱們將標籤貼在方法上java
@Frozen public static void getSomthing(){}
將標籤貼在類上ide
@Frozen public class UseZhujie { }
上面咱們建立了註解,並把他貼在了某處,可是這貨是怎麼工做的呢?工具
首先呢,咱們必須先了解元註解。
所謂元註解,在筆者看來就是註解的基本組成部分,元註解組成註解,是註解裏的基本單位。code
【5種元註解】
A、@Retention
這個註解就是肯定註解的存活時間的,也就是常說的生命週期。blog
RetentionPolicy.SOURCE
註解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視。
RetentionPolicy.CLASS
註解只被保留到編譯進行的時候,它並不會被加載到 JVM 中。
RetentionPolicy.RUNTIME
註解能夠保留到程序運行的時候,它會被加載進入到 JVM 中,因此在程序運行時能夠獲取到它們。繼承
B、@ Documented
它會被 javadoc 之類的工具處理, 因此註解類型信息也會被包括在生成的文檔中,是一個標記註解,沒有成員。
C、@ Target
限制註解的應用場景,就是規定當前的註解能夠貼在什麼地方
ElementType.ANNOTATION_TYPE
能夠給一個註解進行註解
ElementType.CONSTRUCTOR
能夠給構造方法進行註解
ElementType.FIELD
能夠給屬性進行註解
ElementType.LOCAL_VARIABLE
能夠給局部變量進行註解
ElementType.METHOD
能夠給方法進行註解
ElementType.PACKAGE
能夠給一個包進行註解
ElementType.PARAMETER
能夠給一個方法內的參數進行註解
ElementType.TYPE
能夠給一個類型進行註解,好比類、接口、枚舉
D、@ Inherited
繼承,也就是說。
ClassA的註解被@Inherited修飾以後,假設ClassB extends ClassA 那麼ClassB也具備與ClassA被修飾過的同樣的註解了。
E、@ Repeatable
Java1.8新特性接口
public @interface Frozen{ String frozen(); int redant(); } //應用剛建立的註解 @Frozen(frozen = "hoyl", redant = 0) public static void getSomthing(){}
能夠添加屬性默認值生命週期
public @interface Frozen{ /* String frozen(); int redant();*/ //能夠設置默認值 String frozen() default "Frozen"; int redant() default 100; }
這樣被貼標籤的就不用了賦值了 開發
//@Frozen(frozen = "hoyl", redant = 0) @Frozen public static void getSomthing(){}
這些呢,大多數是編譯器自動感知。而後報警告,提示自動添加的。
@ Deprecated
這是告訴開發者,調用的東西過期了文檔
@ Override
想重寫父類的方法
@ SuppressWarnings
一些警告
@ SafeVarargs
阻止編譯器產生 unchecked警告
@ FunctionalInterface
1.8新特性
一、生成文檔。二、跟蹤代碼依賴性,實現替代配置文件XML功能。三、在編譯時進行格式檢查。