一、JDK自帶註解
我們最常見的就是@Override
,表示方法重寫,覆蓋父元素的該方法。
@Override
public String toString() {
return super.toString();
}
除此之外還有Deprecated
和@Suppvisewarnings
,上代碼,
public class Person {
@Deprecated
public void sayHello(){
System.out.println(123);
}
}
這裏定義了一個sayHello的方法,並且用@Deprecated修飾了,用來表示該方法即將被廢除,不推薦使用了。調用的時候會有刪除提示。
但是如果我就想用怎麼辦呢?也可以,添加一個忽略的註解。
public class Boy {
@SuppressWarnings("deprecation")
public static void main(String args[]){
Person person = new Person();
person.sayHello();
}
}
二、自定義註解
首先自定義註解的語法有一定的要求:
使用@interface關鍵字聲明
成員聲明需要無參數,無異常;可以指定默認值
成員的類型有一定的限制:原始類型、String、Class、Annotation(註解接口)、Enumeration(枚舉接口)
沒有任何成員的註解爲“標識註解”
Description.java:
import java.lang.annotation.*;
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
String name(); //無參數
int age() default 19; //默認值
}
前面帶@號的一些註解爲元註解:
- @Target:指定註解的作用域,這裏是用在(METHOD)方法上和(TYPE)類上。
如果用在了沒有指定的作用域上(這裏是成員變量),就會報錯
- @Retention:註解的生命週期,包括:
SOURCE
(源碼中顯示)、CLASS
(編譯到.class文件中)、RUNTIME
(運行中,可以通過反射讀取)
Class c = Class.forName("Use");
// 判斷使用Use這個類中是否有Description這樣一個類註解
boolean isExit = c.isAnnotationPresent(Description.class);
@Inherited:允許子類繼承,僅限作用在類上的註解
@Documented:生成javadoc時會包含註解。(此註解就是上面說的標識註解,沒有任何成員)