1. 程式人生 > >JAVA基礎20-註解

JAVA基礎20-註解

註解

沒有元素的註解 被稱為標記註解
Java.Lang中的三個註解:
@Override,表示當前的方法定義,將覆蓋超類中的方法。
@Deprecated,讓編譯器做出警告
@SuppressWarnings:關閉某些警告

1.元註解

元註解:負責解釋其他註解的註解。

1-1. @Documented

能夠將註解中的元素包含到 Javadoc 中去。

1-2. @Target

@Target 指定了註解運用的地方。
當一個註解被 @Target 註解時,這個註解就被限定了運用的場景。
@Target 有下面的取值
ElementType.ANNOTATION_TYPE 可以給一個註解進行註解
ElementType.CONSTRUCTOR 可以給構造方法進行註解
ElementType.FIELD 可以給屬性進行註解
ElementType.LOCAL_VARIABLE 可以給區域性變數進行註解
ElementType.METHOD 可以給方法進行註解
ElementType.PACKAGE 可以給一個包進行註解
ElementType.PARAMETER 可以給一個方法內的引數進行註解
ElementType.TYPE 可以給一個型別進行註解,比如類、介面、列舉

1-3. @Inherited

允許子類繼承父類的註解

//定義註解
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface Test {}
//Test註解作用在A中
@Test
public class A {}
//B繼承A
public class B extends A {}
註解 Test 被 @Inherited 修飾,之後類 A 被 Test 註解,類 B 繼承 A,類 B 也擁有 Test 這個註解。

1-4. @Retention

表示需要在什麼級別儲存註解
引數:
Source:註解將被編譯器丟棄
class:註解在Class檔案中可用,但會被JVM丟棄
runtime:允許時仍保留此註解,可通過反射機制獲取該註解的資訊

[email protected]

Repeatable 標記的註解可以多次應用於相同的宣告或型別使用【Java 1.8 】

//Repeats.java檔案下(類似集合)
package com.demo9aa.demo5;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface Repeats {
	Repeat[] value();
}

//Repeat.java檔案下

package com.demo9aa.demo5;
import java.lang.annotation.Repeatable;
@Repeatable(value=Repeats.class)
public @interface  Repeat {
	String value();
}

//Demo.java 實驗程式碼

package com.demo9aa.demo5;
public class Demo {
	@Repeat("df")
	@Repeat("15")
	public void sd(){	
	}
}

2.如何定義一個註解

2-1:語法

public @interface 註解名{註解體}
//註解不接受extends關鍵字,不支援繼承

2-2 註解元素

 僅僅能包括如下幾個型別,否則編譯器會報錯
 	1.所有基本資料型別
 	2.Annotation
 	3.enum
 	4.String
 	5.以上型別的陣列