1. 程式人生 > 其它 >Java註解和反射01:註解

Java註解和反射01:註解

什麼是註解

註解不是程式本身,可以對程式作出解釋(這點和註釋一樣)

註解以“@註解名”的形式存在,可以附加在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{}