您好,登錄后才能下訂單哦!
//注解的定義,相當于創建了一個名字為Frozen的標簽
public @interface Frozen{}
上面我們定義了一個注解標簽
下面我們將標簽貼在方法上
@Frozen
public static void getSomthing(){}
將標簽貼在類上
@Frozen
public class UseZhujie {
}
上面我們創建了注解,并把他貼在了某處,但是這貨是怎么工作的呢?
首先呢,我們必須先了解元注解。
所謂元注解,在筆者看來就是注解的基本組成部分,元注解組成注解,是注解里的基本單位。
【5種元注解】
A、@Retention
這個注解就是確定注解的存活時間的,也就是常說的生命周期。
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新特性
1、生成文檔。
2、跟蹤代碼依賴性,實現替代配置文件XML功能。
3、在編譯時進行格式檢查。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。