一:註解的基本概念
註解也被稱爲元數據,使我們在代碼中添加信息提供了一種形式化的方法,在以後非常方便的使用該數據
Java內置的註解有三個:
@Overried:表示當前的方法將覆蓋超類中的方法
@Deprecated:如果加了該註解,則編譯器將會發出警告
@SuppressWaring:關閉警告信息
自定義註解:
@Retention(RetentionPolicy.RUNTIME)
public @interface StudyAnnoation {
}
這是一個簡單的註解,我們定義一個註解就是在interface前面加上一個@符號,但是這樣,註解只是在CLASS文件中可用,在運行階段將不能使用,對此,Java提供了四種元註解來寫自定義註解
@Target: 作用在什麼地方 ElementType枚舉類提供,
CONSTRUCTOR 構造器聲明
FIELD 域聲明(包括enum實例)
LOCAL_VARIABLE(局部變量聲明)
METHOD (方法)
PACKAGE (包)
PARAMETER (參數)
TYPE (類,接口(包括enum聲明))或enum聲明
@Retention 表示該註解保留到什麼時間 RetentionPolicy枚舉類提供了三個,默認class
SOURCE 編譯器丟棄
CLASS 在class文件中可用,在jvm中不可用
RUNTIME VM運行期
@Document 表示該註解包含在Javadoc文件中
@Inherited 允許子類繼承父類的註解
測試代碼
@StudyAnnoation
public class AnnoationTest {
public static void main(String[] args) {
//測試該註解是否是此類型
if(AnnoationTest.class.isAnnotationPresent(StudyAnnoation.class)){
//得到該註解
Annotation annoation = Annotation.class.getAnnotation(StudyAnnoation.class);
System.out.println("StudyAnnoation");
}
}
}
二.編寫註解元素
註解元素可用的類型包括
所有的基本類型,String,Class,enum,註解,以上類型的數組
註解元素可用值的限制
註解元素不能具有不確定的值,也就是說必須提供默認值或者在調用時提供值。對於非基本類型的註解元素,其不能用null作爲其值。可以用-1或者""來代替
例:新建一個註解
public @interface AnnoationType {
String value();
}
改寫第一個註解類,包括一些註解元素
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface StudyAnnoation {
int id();
String name() default "name";
AnnoationType annoationType() default @AnnoationType("annoationType");
}
測試:
@StudyAnnoation(id=1,name = "studyannoation")
public class AnnoationTest {
public static void main(String[] args) {
//測試該註解是否是此類型
if(AnnoationTest.class.isAnnotationPresent(StudyAnnoation.class)){
//得到該註解
StudyAnnoation annoation = AnnoationTest.class.getAnnotation(StudyAnnoation.class);
//獲取該接口的name方法
System.out.println(annoation.name());
System.out.println(annoation.id());
System.out.println(annoation.annoationType().value());
}
}
}
對於在使用註解的時候,傳值有事要加元素名,有時不加,怎麼區分了,只有當註解只有一個元素,並且名爲value時,纔不需要加