創(chuàng)建Java自定義注解
創(chuàng)建自定義注解和創(chuàng)建一個接口相似榜掌,但是注解的interface關(guān)鍵字需要以@符號開頭。我們可以為注解聲明方法。我們先來看看注解的例子唠椭,然后我們將討論他的一些特性。
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*-----------------定義注解--------------------*/
@Retention(RetentionPolicy.SOURCE)//聲明注釋保留時長
@Target(ElementType.METHOD)//聲明可以使用此注解的元素級別類型(如類忍饰、方法變量等)
@Documented//表示當(dāng)標(biāo)注了NeedRecord注解的對象在被javadoc生成文檔時贪嫂,NeedRecord注解將會被API文檔記錄
public @interface NeedRecord {//定義注解
String userName() default "anonymous";//定義注解成員,同時用default聲明默認(rèn)值艾蓝,如果不想聲明默認(rèn)值力崇,去掉default部分即可
String value() ;
}
/*------------------使用注解實(shí)例1-----------------*/
@NeedRecord("login")
public void login(){
System.out.println("I'm zenghao ,I'm logining");
}
/*------------------使用注解實(shí)例2-----------------*/
@NeedRecord(userName = "zenghao",value = "login")
public void login(){
System.out.println("I'm zenghao ,I'm logining");
}
四個元注解
JDK中有一些元注解,主要有@Target赢织,@Retention,@Document,@Inherited用來修飾注解亮靴。
Target類型 描述
ElementType.TYPE 一> 應(yīng)用于類、接口(包括注解類型)于置、枚舉
ElementType.FIELD 一>應(yīng)用于屬性(包括枚舉中的常量)
ElementType.METHOD一> 應(yīng)用于方法
ElementType.PARAMETER 一>應(yīng)用于方法的形參
ElementType.CONSTRUCTOR一> 應(yīng)用于構(gòu)造函數(shù)
ElementType.LOCAL_VARIABLE 一>應(yīng)用于局部變量
ElementType.ANNOTATION_TYPE 一>應(yīng)用于注解類型
ElementType.PACKAGE 一>應(yīng)用于包
ElementType.TYPE_PARAMETER 一>1.8版本新增茧吊,應(yīng)用于類型變量)
ElementType.TYPE_USE 一>1.8版本新增,應(yīng)用于任何使用類型的語句中(例如聲明語句、泛型和強(qiáng)制轉(zhuǎn)換語句中的類型)
@Retention
表明該注解的生命周期
生命周期類型 描述
RetentionPolicy.SOURCE一> 編譯時被丟棄搓侄,不包含在類文件中
RetentionPolicy.CLASS一> JVM加載時被丟棄瞄桨,包含在類文件中,默認(rèn)值
RetentionPolicy.RUNTIME一> 由JVM 加載讶踪,包含在類文件中芯侥,在運(yùn)行時可以被獲取到
@Document
表明該注解標(biāo)記的元素可以被Javadoc 或類似的工具文檔化
@Inherited
表明使用了@Inherited注解的注解,所標(biāo)記的類的子類也會擁有這個注解