JavaScript中filter()方法
阿新 • • 發佈:2022-04-08
Java註解
一,前言
瞭解什麼是註解,掌握三種內建註解,掌握元註解,掌握自定義註解
二,註解的概述
註解(Annotation)其實就是一種標記,但是它本身並不起任何作用,註解處理程式通過捕獲被註解標記的程式碼然後進行一些處理,這就是註解工作的方式。
三,內建註解
JavaSE內建了三種註解。
- @Override
定義在java.lang.Override中,表示宣告是一個重寫父類的方法,並監視驗證方法名稱是否為父類所有。
- @Deprecated
定義在java.lang.Deprecated中,表示此方法已廢棄、暫時可用,建議不要呼叫此方法。
- @SuppressWarnings
定義在java.lang.SuppressWarnings中,用來抑制編譯時的警告資訊。
四,元註解
對註解進行註解,也就是對註解進行標記,對註解的行為做出一些限制,例如生命週期,作用範圍等等。(定義在java.lang.annotation中)
1.@Target
用於描述註解的使用範圍。
例項化:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
ElementType類:
public enum ElementType { TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE, ANNOTATION_TYPE,PACKAGE }
型別 | 作用的物件型別 |
---|---|
TYPE | 類、介面、列舉 |
FIELD | 類屬性 |
METHOD | 方法 |
PARAMETER | 引數型別 |
CONSTRUCTOR | 構造方法 |
LOCAL_VARIABLE | 區域性變數 |
ANNOTATION_TYPE | 註解 |
PACKAGE | 包 |
TYPE_PARAMETER | 1.8之後,泛型 |
TYPE_USE | 1.8之後,除了PACKAGE之外任意型別 |
2.@Retention
描述註解的生命週期,表示什麼級別時註釋存在。
例項化:
@Retention(RetentionPolicy.RUNTIME) public @interface Retention { RetentionPolicy value(); }
RetentionPolicy類:
public enum RetentionPolicy {
SOURCE,
CLASS,
RUNTIME
}
型別 | 作用 |
---|---|
SOURCE | 註解只在原始碼階段保留,在編譯器進行編譯的時候這類註解被抹除,常見的@Override就屬於這種註解 |
CLASS | 註解在編譯期保留,但是當Java虛擬機器載入class檔案時會被丟棄,這個也是@Retention的「預設值」。@Deprecated和@NonNull就屬於這樣的註解 |
RUNTIME | 註解在執行期間仍然保留,在程式中可以通過反射獲取,Spring中常見的@Controller、@Service等都屬於這一類 |
3.@Documented
將註解的元素加入Javadoc中。
4.@Inherited
說明子類可繼承父類中的該註解。
5.@Repeatable
表示該註解可以重複標記。
五,自定義註解
使用@interface自定義註解時,自動繼承了java.lang.annotation.Annotation介面。
- @interface用來宣告一個註解
- 方法名稱就是配置引數
- 通過default宣告引數的預設值
- 如果只有一個引數,通常引數名為value
例:
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintMsg {
int count() default 1;
String name() default "my name is PrintMsg";
}
@PrintMsg(count = 2020)
public class AnnotationTest {
public static void main(String[] args) {
//通過反射獲取該註解
PrintMsg annotation = AnnotationTest.class.getAnnotation(PrintMsg.class);
System.out.println(annotation.count());
System.out.println(annotation.name());
}
}
輸出如下:
2020
my name is PrintMsg