Java註解和反射01:註解
阿新 • • 發佈:2022-03-15
什麼是註解
註解不是程式本身,可以對程式作出解釋(這點和註釋一樣)
註解以“@註解名”的形式存在,可以附加在package、class、method、field上,可以通過反射機制程式設計實現對這些元資料的訪問,可以被其他程式(比如編譯器)讀取
內建註解
@Override、@Deprecated
@SuppressWarnings,用來抑制編譯時的警告資訊,需要傳入一個引數
元註解
元註解的作用是註解其他註解,Java定義了4個標準元註解
@Target,用於描述註解的使用範圍
@Retention,表示需要在什麼級別儲存該註解資訊,用於描述註解的生命週期(SOURCE < CLASS < RUNTIME
)@Documented,說明該註解將被包含在javadoc中
@Inherited,說明子類可以繼承父類中的該註解
自定義註解
如果只有一個引數,名字一般為value,這樣可以直接寫值
返回值型別就是引數的型別(只能是基本型別Class、String、enum)
註解引數必須要有值,可以通過default來宣告引數的預設值
import java.lang.annotation.*; /** * @Target()指定註解的使用範圍 * @Retention()指定註解的生效週期 * @Documented表示將註解生成在javadoc中 * @Inherited表示子類可以繼承該註解 */ @Target(value = {ElementType.METHOD, ElementType.TYPE}) @Retention(value = RetentionPolicy.RUNTIME) @Documented @Inherited /** * @interface自定義註解 */ @interface MyAnnotation{ /** * 定義引數:引數型別 引數名() default 值 * 如果值為-1說明不存在 */ String name(); int age() default 0; int id() default -1; String[] title(); } @interface MyAnnotation2{ String value(); } /** * 如果註解引數設定了預設值可以不用寫 */ @MyAnnotation(name = "ty", title = {"student", "son"}) @MyAnnotation2("ty") class test{}