Annotation(註解) 學習

一,Annotation(註解) 概述java

Annotation 其實就是代碼裏的特殊標記, 它用於替代配置文件,也就是說,傳統方式經過配置文件告訴類如何運行,有了註解技術後,開發人員能夠經過註解告訴類如何運行數組

三個基本的 Annotation: ide

@Override: 限定重寫父類方法, 該註解只能用於方法 工具

@Deprecated: 用於表示某個程序元素(, 方法等)已過期 spa

@SuppressWarnings: 抑制編譯器警告.net

二,自定義 Annotationcode

1,方法:繼承

定義Annotation 使用 @interface 關鍵字:(做用,原來寫在配置文件中的信息,能夠經過註解描述內存

2,支持的類型:
開發

註解屬性的類型只能是以下類型:

String類型  8大基本數據類型  Class類型  枚舉類型  註解類型 以上類型的一維數組

代碼(定義註解):

public @interface MyAnnotation {
	//支持的能夠配置的類型
	String name() default "flx";//聲明註解的屬性,默認 "flx"
	int age() default 35;
	Gender gender() default Gender.MALE;
	Class clazz() default String.class;//配置一個類
	MyAnnotation2 my2() default @MyAnnotation2(name="fsq");//註解中的註解,實現一些嵌套配置
	
	String [] args() default {"11","222"};
	
	//還支持以上類型的一維數組
}

代碼(使用註解):

@MyAnnotation(name="zxx",age=38,gender=Gender.FEMALE,clazz=String.class,my2=@MyAnnotation2(name="zc"),args={"111"})
	public void test3(){
		
	}

有若是一個註解只有一個屬性,而且這個屬性的名稱爲value的話,那麼使用註解時能夠省略value=部分,如@MyAnnotation(「xxx"),直接賦值


3、JDK 的元 Annotation

Annotation指修飾AnnotationAnnotation

JDK中定義了以下元Annotation:

@Retention: 只能用於修飾一個 Annotation 定義, 用於指定該 Annotation 能夠保留的域, @Rentention 包含一個 RetentionPolicy 類型的成員變量, 經過這個變量指定域。

RetentionPolicy.CLASS: 編譯器將把註解記錄在 class 文件中. 當運行 Java 程序時, JVM 不會保留註解. 這是默認值 RetentionPolicy.RUNTIME:編譯器將把註釋記錄在 class 文件中. 當運行 Java 程序時, JVM 會保留註解. 程序能夠經過反射獲取該註釋 RetentionPolicy.SOURCE: 編譯器直接丟棄這種策略的註釋

代碼(聲明運行時 註解):

@Retention(RetentionPolicy.RUNTIME)//加元註解,將註解聲明爲運行時註解
public @interface MyAnnotation {////若是註解不加說明的話,註解是做用在class上的,但當虛擬機將class加載到內存以後,會拋棄這個註解
	//支持的能夠配置的類型
	String name() default "flx";//聲明註解的屬性,默認 "flx"
	int age() default 35;
	Gender gender() default Gender.MALE;
	Class clazz() default String.class;//配置一個類
	MyAnnotation2 my2() default @MyAnnotation2(name="fsq");//註解中的註解,實現一些嵌套配置
	
	String [] args() default {"11","222"};
	
	//還支持以上類型的一維數組
}


@Target :指定註解用於修飾類的哪一個成員. @Target 包含了一個名爲 value,類型爲ElementType的成員變量。

代碼:

@Target({ElementType.METHOD,ElementType.FIELD})//若是沒有聲明,會做用於類的全部成員
public @interface MyAnnotation {////若是註解不加說明的話,註解是做用在class上的,但當虛擬機將class加載到內存以後,會拋棄這個註解
	//支持的能夠配置的類型
	String name() default "flx";//聲明註解的屬性,默認 "flx"
	int age() default 35;
	Gender gender() default Gender.MALE;
	Class clazz() default String.class;//配置一個類
	MyAnnotation2 my2() default @MyAnnotation2(name="fsq");//註解中的註解,實現一些嵌套配置
	
	String [] args() default {"11","222"};
	
	//還支持以上類型的一維數組
}


l@Documented: 用於指定被該元 Annotation 修飾的 Annotation 類將被 javadoc 工具提取成文檔.

l@Inherited: 被它修飾的 Annotation 將具備繼承性.若是某個類使用了被 @Inherited 修飾的 Annotation, 則其子類將自動具備該註解

代碼:

@Inherited//使用MyAnnotation註解的類在被子類繼承時,註解的信息也被繼承
public @interface MyAnnotation {////若是註解不加說明的話,註解是做用在class上的,但當虛擬機將class加載到內存以後,會拋棄這個註解
	//支持的能夠配置的類型
	String name() default "flx";//聲明註解的屬性,默認 "flx"
	int age() default 35;
	Gender gender() default Gender.MALE;
	Class clazz() default String.class;//配置一個類
	MyAnnotation2 my2() default @MyAnnotation2(name="fsq");//註解中的註解,實現一些嵌套配置
	
	String [] args() default {"11","222"};
	
	//還支持以上類型的一維數組
}
相關文章
相關標籤/搜索