註解
1、概述
-
定義:註解(Annotation),也叫元數據。一種代碼級別的說明。它是JDK1.5及以後版本引入的一個特性,與類、接口、枚舉是在同一個層次。它可以聲明在包、類、字段、方法、局部變量、方法參數等的前面,用來對這些元素進行說明、註釋。
-
作用分類:
-
①編寫文檔:通過代碼裏標識的元數據生成文檔【生成文檔doc文檔】
-
② 代碼分析:通過代碼裏標識的元數據對代碼進行分析【使用反射】
-
③編譯檢查:通過代碼裏標識的元數據讓編譯器能夠實現基本的編譯檢查【Override】
-
-
註解的格式:
@註釋名(參數名=參數值,...)
還可以添加一些參數:
@註釋名(參數名=參數值,...)
2、內置註解
-
@Override:定義在 java.long.Override 中,此註解只適用於修飾方法,表示一個方法重寫超類中的另一個方法。
-
@Deprecated:定義在 java.long.Deprecated 中,此註釋可以修飾方法、屬性、類,表示不鼓勵程序員使用這樣的元素,通常是因爲它很危險或存在更好的選擇。
-
@SuppressWarnings:定義在 java.long.SuppressWarnings 中,用來取消顯示指定的編譯器警告。
-
此註解必須加參數才能使用,示例:
抑制單類型的警告:
@SuppressWarnings(“unchecked”)
抑制多類型的警告:
@SuppressWarnings(value={“unchecked”, “rawtypes”})
抑制所有類型的警告:
@SuppressWarnings(“all”)
-
抑制警告的參數
-
參數 | 用途 |
---|---|
all | to suppress all warnings(抑制所有警告) |
boxing | to suppress warnings relative to boxing/unboxing operations(要抑制與箱/非裝箱操作相關的警告) |
cast | to suppress warnings relative to cast operations(爲了抑制與強制轉換操作相關的警告) |
dep-ann | to suppress warnings relative to deprecated annotation(要抑制相對於棄用註釋的警告) |
deprecation | to suppress warnings relative to deprecation(要抑制相對於棄用的警告) |
fallthrough | to suppress warnings relative to missing breaks in switch statements(在switch語句中,抑制與缺失中斷相關的警告) |
finally | to suppress warnings relative to finally block that don’t return(爲了抑制警告,相對於最終阻止不返回的警告) |
hiding | to suppress warnings relative to locals that hide variable(爲了抑制本地隱藏變量的警告) |
incomplete-switch | to suppress warnings relative to missing entries in a switch statement (enum case)(爲了在switch語句(enum案例)中抑制相對於缺失條目的警告) |
nls | to suppress warnings relative to non-nls string literals(要抑制相對於非nls字符串字面量的警告) |
null | to suppress warnings relative to null analysis(爲了抑制與null分析相關的警告) |
rawtypes | to suppress warnings relative to un-specific types when using generics on class params(在類params上使用泛型時,要抑制相對於非特異性類型的警告) |
restriction | to suppress warnings relative to usage of discouraged or forbidden references(禁止使用警告或禁止引用的警告) |
serial | to suppress warnings relative to missing serialVersionUID field for a serializable class(爲了一個可串行化的類,爲了抑制相對於缺失的serialVersionUID字段的警告) |
static-access | o suppress warnings relative to incorrect static access(o抑制與不正確的靜態訪問相關的警告) |
synthetic-access | to suppress warnings relative to unoptimized access from inner classes(相對於內部類的未優化訪問,來抑制警告) |
unchecked | to suppress warnings relative to unchecked operations(相對於不受約束的操作,抑制警告) |
unqualified-field-access | to suppress warnings relative to field access unqualified(爲了抑制與現場訪問相關的警告) |
unused | to suppress warnings relative to unused code(抑制沒有使用過代碼的警告) |
-
演示:
-
未抑制警告前:
-
抑制警告後
-
3、 元註解
- 負責註解其他註解,Java定義了4個標準的meta-annotation類型,它們被用來對其他annotation類型作說明。
- 這些註解所支持的類可在 java.long.annotation 包中找到。
- @Target:用於描述註解的適用範圍;
- @Retention:用於描述註解的生命週期,表示需要在什麼級別保存該註解;(SOURCE < CLASS < RUNTIME)
- **@Documented:**指示該註解將通過 javadoc 和類似的默認工具進行文檔化;
- @Inherited:指示該註解被自動繼承。
4、自定義註解
import java.lang.annotation.*;
@MyAnnotation(name = "Test02",id=1)
public class Test02 {
public static void main(String[] args) {
test();
}
//註解參數有默認值可以不顯式賦值,沒有默認值必須要顯式賦值
@MyAnnotation(name="test")
private static void test(){
System.out.println("MyAnnotation");
}
}
//描述註解的適用範圍
@Target(value={ElementType.METHOD,ElementType.TYPE})
//描述註解的生命週期 SOURCE < CLASS < RUNTIME
@Retention(value=RetentionPolicy.RUNTIME)
@Documented //可以將此註解生成在javadoc文檔中
@Inherited //此註解可被子類繼承
//自定義註解格式:@interface 註解名{}
@interface MyAnnotation{
//定義註解的參數 格式:參數類型 參數名();
String name();
int id()default -1;//默認值爲 -1
}
-
如果註解只有一個參數,則參數名一般定義爲 value ,在使用該註解時,參數名可以省略不寫,直接寫值。
- 例:
@SuppressWarnings(value="all")
等價於@SuppressWarnings("all")