Java 註解

java 註解

註解的介紹

提到註解,我們會不由的想到註釋,其實註解和註釋不是一個東西,註釋的作用就是解釋代碼,方便理解和閱讀,說白了就是給程序員看的。而註解則不是,註解的作用比較大,可以進行編譯檢查、生成doc文檔或者進行代碼分析。
java語言中的類、方法、變量等都可以被標註。java標註可以通過反射獲取標註內容,在編譯器生成類文件時,標註可以被嵌入到字節碼中。虛擬機可以保存標註內容,在運行時可以獲取到標註內容。

java 預定義中的註解

  1. @Override:
    重寫或者實現父類或者接口中的方法時,會出現這個註解,強制格式檢查
  2. @Deprecated
    標註當前方法已經過時。
  3. @SuppressWarnings(“all”)
    壓制警告

java 中自定義註解

格式

//  MyAnnotation1 自定義註解名,注意@
public @interface MyAnnotation1 {}

我們可以通過反編譯看一下如何實現的在這裏插入圖片描述
這就好像我們定義了一個接口,這個接口繼承了java.lang.annotation.Annotation,既然是接口,我們也可以添加一些屬性,比如說 int 類型的 id,String 類型的 name,除此之外還可以添加數組類型,枚舉類型或者自定義的註解類型(注意有括號)
舉個例子:

public @interface MyAnnotation2 {
	//default 默認值
	int id() default 1;
	
	String name();
	
	MyAnnotation1 annotation1();
	
	//枚舉類型
	TypeEnum status();
	
	//String 類型的數組
	String[] hobbies();
}
//枚舉類型TypeEnum
public enum TypeEnum{	
	A{1, “三殺了”},
	B(2, “四殺了,我的五殺,五殺!!”),
	C(3, "XXX已被終結,垃圾遊戲,ALT + F4");
	private int status;
	private String msg;
	TypeEnum(int status, String msg) {
		this.status = status;
		this.msg = msg; 
	}
	//省略getter setter方法
}

定義完成之後,在使用的時候需要注意以下幾點:

  1. 有屬性的,在使用時應對屬性進行賦值。
  2. 有默認值的(default)的可以賦值也可以不賦值,不進行賦值操作就是默認值
  3. 有且只有一個value(無論數據類型是什麼)屬性,或者除了value屬性之外的其他屬性都有默認值,那麼在賦值的時候不需要 ‘屬性 = 值’,直接可以給定數值。
  4. 一個方法可以有多個註解。
    在這裏插入圖片描述

元註解

給予註解的解釋,就是用來約束註解的。

  1. @Retention
    說明這個註解的生命週期到哪,有三個取值
    RetentionPolicy.SOURCE : 只在源碼階段保留,不參與代碼的運行和解析,不保留在class文件裏
    RetentionPolicy.CLASS : 保留到編譯進行的時候,不會被加載到虛擬機裏
    RetentionPolicy.RUNTIME : 可以加載到虛擬機裏,參與代碼執行,在程序運行的時候可以獲取他們
  2. @Documented
    將註解的元素可以包含到javadoc文檔中
  3. @Target
    標記這個註解是那種 java 成員,是方法,是類,還是屬性等
    ElementType.TYPE 當前註解可以用於類、接口聲明
    ElementType.METHOD 用於方法的聲明位置
    ElementType.FIELD 用於成員變量的聲明位置
  4. @Inherited
    標記這個註解是繼承於哪個這注解類,就是說如果一個被@Inherited 修飾註解註解在一個父類上,那麼他的子類也會有這個被@Inherited修飾的註解
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章