Java的自帶註解Annotation(一)

諸惡莫作,衆善奉行,自淨其意,是諸佛教
勸諸君,多行善事積福報,莫作惡

上一章簡單介紹了TCP實現聊天室(五),如果沒有看過,請觀看上一章

Java的註解 Annotation 是在 JDK 1.5 的時候引入的。

我們在學習框架的時候,尤其是 Spring 框架的時候,會有很多很多的註解, 如 @Resource, @Autowired ,@RequestMapping 等,在類或者屬性,或者方法上面,添加了這些註解,這可以標識這些類,屬性,方法,使它們具有一些特殊的意義。 這就是註解。

Java 自帶了 三個註解 @Override, @Deprecated ,@SuppressWarnings 三個註解。

老蝴蝶和大家學習一下,這三個註解。

一. @Override 註解

一.一 註解的定義

@Override 註解,是重寫方法時使用的。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {

	

}

@Target 表示放置的位置, 後面跟的是 METHOD, 表示只能放置在方法上面 。

@Retention 後面跟的是 SOURCE, 資源,表示只在源文件裏面出現。

關於 @Target 和 @Retention 詳細是什麼意思,後面老蝴蝶會講解的。

在方法上面,添加這些註解,這表示這個方法是繼承父類或者父接口的。

一.二 演示註解@Override

有一個簡單的抽象父類 Person, 裏面有 id,name,sex,age,desc 五個屬性,還有一個抽象方法 getInfo(), 一個普通方法 sayHello()

//前面的代碼
...
     //返回信息
    public abstract String getInfo();

    public String sayHello(String name){
        return "你好,"+name+",我是"+getInfo();
    }
...
//後面的代碼

還有一個子類 Student, 繼承 Person 類,重寫 getInfo() 方法 和 sayHello() 方法

	public class Student extends Person {

    @Override
    public String getInfo() {
        return "兩個蝴蝶飛";
    }


    //返回 name, 重寫父類的方法
    public String sayHello(String name){
        return name;
    }
}

會發現, getInfo() 方法上面這有這麼一個 @Override 註解。 這個註解,表示這個方法 getInfo() 是重寫父類的,如果父類沒有這個方法,那麼就報錯。

就拿下面的 sayHello() 方法進行舉例, 現在 父類裏面也有 sayHello() 方法, 那麼就可以在這個方法上面添加 這個註解。

 //返回 name, 重寫父類的方法
    @Override
    public String sayHello(String name){
        return name;
    }

沒有報錯。

但如果一不小心,把 sayHello()方法寫錯了, 如寫成了 sayhello()了, 那麼這會在編譯時提示報錯

有圖片

Method does not override method from its superclass

因爲在 sayhello()方法上面添加了這個註解,就表示這個方法是從父類或者接口那裏重寫過來的,並不是子類特有的,而這個sayhello()方法,父類並沒有,所以報錯。

簡單來說, @Override 註解,就是保證重寫方法的正確性,保證程序運行正確,避免方法名寫錯的情況。

老蝴蝶建議,重寫父類方法或者實現接口時, 在方法上面都添加這麼一個註解,表示這個方法的來源。

二. @Deprecated 註解

二.一 註解的定義

@Deprecated 註解,表示不建議使用的一個操作, 是對一些過時或者不安全的類,方法,屬性進行提示。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}

@Documented 表示文檔

@Retention 表示在執行時出現

@Target 表示放置位置 可以是 構造方法,屬性,局部變量,方法,包,參數,類型上面。 標識範圍比較廣。

二.二 演示@Deprecated

@Deprecated 註解,可以標識 JDK 自帶的,也可以是用戶自定義的。 如果加上了這個註解,在後面調用時,該代碼上面會有一條橫線,表示過時的意思。

二.二.一 系統自帶的過時

最常見的,就是 java.util.Date 類了。

有圖片

點進去,查看源代碼

  @Deprecated
    public String toLocaleString() {
        DateFormat formatter = DateFormat.getDateTimeInstance();
        return formatter.format(this);
    }

會發現,該方法上面有 @Deprecated 註解。

注意,過時並不代碼不能用,更不代表是錯誤, 但建議還是不用過時的方法。

二.二.二 用戶自定義過時

如剛纔的 Student 子類, 在類上面和方法上面,加上這麼一個註解

//添加到類上面
@Deprecated
public class Student extends Person {

//添加到方法上
    @Deprecated
    @Override
    public String getInfo() {
        return "兩個蝴蝶飛";
    }

    //返回 name, 重寫父類的方法
    @Override
    public String sayHello(String name){
        return name;
    }

}

那麼在實例化這個類,調用這個方法時

有圖片

上面會有這麼一個橫線

包下查看類時,發現也會這麼一個橫線

有圖片

三. @SuppressWarnings 註解

三.一 註解定義

三.一.一 定義

@SuppressWarnings, 表示 壓制警告, 使警告消失(是一種自我欺騙)。

在我們寫代碼時,就像使用 java.util.Date 類時, 常常會有上面的過時方法使用,那麼在運行程序時,就會報警告。雖然警告並不是錯誤,但是有些開發者,如老蝴蝶自己,就不喜歡警告,如果能夠把這些常見的警告給弄消失了,不就可以了嗎? @SuppressWarnings,就應用而生了。

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {

   	//屬性
    String[] value();
}

@Target, 表示可以應用在類型,屬性,方法,參數,構造方法,局部變量上面。

@Retention 表示只出現在源文件裏面。

注意,註解裏面定義的是 數據類型 屬性, 指 有一個 value 屬性,類型是 字符串數組,並不是方法。這個特別要註解。

如果屬性沒有默認值,則必須放置值。

三.一.二 value 值常用取值

該 value 屬性值有以下幾種範圍值

value 值 作用
deprecation 使用時不贊成,過時的類,方法時的警告
unchecked 未檢查轉換時的警告,如泛型操作中沒有指定具體的泛型類型
fallthrough switch 直接向下,沒有break 時
path 類路徑,源文件路徑等有不存在的路徑時的警告
serial 在可序列化類上缺少 serialVersionUID 屬性時的警告
finally try catch finally 語句時 finally 語句不能正常完成時的警告
rawtypes 泛型化參數未指定具體的類型
unused 未被使用
all 以上所有的情況時的警告

三.二 演示註解

三.一.一 演示 deprecation

有圖片

添加 壓制註解

有圖片

三.一.二 演示 unchecked 和 rawtypes

有圖片

添加警告

有圖片

也可以直接 all

有圖片

關於Java系統自帶的三個註解,就講解這麼多。


謝謝您的觀看,如果喜歡,請關注我,再次感謝 !!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章