諸惡莫作,衆善奉行,自淨其意,是諸佛教
勸諸君,多行善事積福報,莫作惡
上一章簡單介紹了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系統自帶的三個註解,就講解這麼多。
謝謝您的觀看,如果喜歡,請關注我,再次感謝 !!!