分類:按運行機制分有源碼註解,編譯時註解,運行時註解
源碼註解:編譯時丟棄
編譯時註解:註解在源碼和.class文件中都存在,編譯時起作用@override、@Deprecated、@Suppvisewarnings。
運行時註解:在運行時還起作用@Autowired
元註解:註解的註解
@Target({ElementType.METHOD,ElementType.TYPE})//註解的作用域,有CONSTRUCTOR FIELD LOCAL_VARIABLE METHOD PACKAGE PARAMETER TYPE
@Retention(RetentionPolicy.RUNTIME)//生命週期SOURCE,CLASS,RUNTIME 在什麼階段起作用
@Inherited 允許子類繼承
@Document 生成javadoc時會包含註解的信息
自定義註解
//1成員必須無參無異常,類型有String,Class,Annotation,Enumeration,
//2如果註解只有一個成員,則成員名必須取名爲value(),在使用時可以忽略成員名和賦值號(=)
//3註解類可以沒有成員,沒有成員的註解爲標識註解
public @interface Description{ //使用@interface關鍵字定義註解
String desc();
Stirng author();
int age() default 10; //4可以用default爲成員指定一個默認值
}
使用註解的語法:
@<註解名>(<成員名1>=<成員值1>,<成員名2>=<成員值12,…)
@Description(desc="i am eyeColor",author="xiao chen",age=18)
public String eyeColor(){
return "red";
}
使用註解
@Description(desc="yyy",author="xiao chen",age=19)
public class Child {
@Description(desc="yyy",author="xiao chen",age=19)
public String name() {
return null;
}
}
解析註解
public class ParseAnnotation {
public static void main(String[] args){
//1.使用類加載器加載類
try {
Class c=Class.forName("com.annotation.test.Child");
//2.找到類上面的註解
boolean isExist=c.isAnnotationPresent(Description.class);//判斷是否存在Decription這個註解
if(isExist){
//3.拿到註解實例
Description d=(Description)c.getAnnotation(Description.class);
System.out.println(d.desc()+d.author()+d.age());
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}