Java-註解

一、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; //默認值
}

前面帶@號的一些註解爲元註解

  1. @Target:指定註解的作用域,這裏是用在(METHOD)方法上和(TYPE)類上。

如果用在了沒有指定的作用域上(這裏是成員變量),就會報錯

  1. @Retention:註解的生命週期,包括:SOURCE(源碼中顯示)、CLASS (編譯到.class文件中)、RUNTIME(運行中,可以通過反射讀取)
Class c = Class.forName("Use");
// 判斷使用Use這個類中是否有Description這樣一個類註解
boolean isExit = c.isAnnotationPresent(Description.class);
  1. @Inherited:允許子類繼承,僅限作用在類上的註解

  2. @Documented:生成javadoc時會包含註解。(此註解就是上面說的標識註解,沒有任何成員)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章