註解概念:
1、JDK5及其以後JDK版本開始支持Java註解;
2、Java註解(Annotation)也叫作元數據,以‘@註解名’在代碼中存在,它是一種在源代碼中標註的特殊標記,可以標註源代碼中的類、屬性、方法、參數等代碼,主要用於創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。
Java註解按照是否含有參數分爲三種:
不帶參數,語法結構爲:@Annotation
帶一個參數的註解,語法結構爲:@Annotation(參數)
//也可@SuppressWarnings(value = "unused")(消除警告可以在方法外面也可以在類外部)
//也可@SuppressWarnings(value = { "unused", "deprecation" })
帶多個參數的註解,語法結構爲:@Annotiation(參數1, 參數2, 參數3...)
內置註解:
@Override註解:
@Override被用於標註方法,用於說明所標註的方法是重寫父類的方法:
爲了支持@Override,需要將項目工程升級爲1.6或其以上版本;如果升級後Java代碼沒問題,但是工程報錯,可以通過如下操作解決:右鍵項目“Properties”——>“Project Facets”——>右邊java項選擇相應的版本就OK了。
@Deprecated註解
@Deprecated 用於說明所標註元素(成員變量或方法)因存在安全問題或有更好選擇而不鼓勵程序員使用,如果強行使用,則編譯器會發出警告。(通俗來說就是方法過時)
過時的方法可以使用但是不建議使用,此時我們要消除警告。因Date類中getHours()添加了@Deprecated註解,所以使用時出現了黃色波浪線。
@SuppressWarnings註解
@SuppressWarnings用於取消編譯器所顯示的警告,該註解常用屬性值如下:
deprecation:使用已被@Deprecated標註的程序元素;、
unused:程序含有未被使用的元素;
serial:在可序列化的類上缺少serialVersionUID定義;
自定義註釋:
註解語法結構:
[public] @interface 註解名 {
[屬性1;]
[屬性2;]
...
[屬性n;] }
屬性語法結構:
數據類型 屬性名() [default 默認屬性值];
注意: 註解屬性默認沒有默認值,如果註解中定義了無默認值的註解屬性,則使用該註解時必須指定值:
如果註解屬性名爲value,使用該註解時可以直接賦值:
由於@SuppressWarnings註解內定義的註解屬性的屬性名爲value,所以賦值時可以省略“value=”。
如果註解屬性的數據類型爲數組類型,賦多個值時必須使用{}括起來;但若只賦一個值,則無需使用{}:
由於value註解屬性有多個值,所以賦值時必須使用{}將值括起來
value註解屬性只有一個值,所以賦值時無需使用{}將值括起來
元註解——@Target
Java提供了四個用於修飾自定義註解的元註解:@Target、@Retention 、@Documented和@Inherited
@Target:用於指定被修飾的自定義註解只能用於修飾程序中哪些元素,該元註解有如下屬性值:
1、ElementType.FIELD:應用於全局屬性
2、ElementType.METHOD:應用於方法
3、ElementType.PARAMETER:應用於方法的參數
4、ElementType.TYPE:應用於類、接口或者枚舉聲明
元註解——@Target
限制自定義註解@Override只能用來標註方法。注意:由前面知識可知大括號可以去掉(因爲value賦值的時候可以省略)。
元註解——@Retention
@Retention:用於指定被修飾的自定義註解可以保留多久,該元註解有如下屬性值:
1、RetentionPolicy.SOURCE:編譯器將直接丟棄被修飾的註解。
2、RetentionPolicy.CLASS:默認值,編譯器將把註解記錄在class文件中,當運行Java程序時,虛擬機不再保留註解;
3、RetentionPolicy.RUNTIME:編譯器將把註解記錄在class文件中,當運行java程序時,虛擬機保留註解,程序可以通過反射獲取該註解;
元註解——@Documented
1、選中java工程鼠標右鍵點擊“Export…”,出現下圖:
2、在上圖紅框處輸入javadoc點擊“Next >”按鈕,出現下圖:
3、點擊“Finish”按鈕打開項目根目錄打開名爲doc的文件夾使用瀏覽器軟件(如Google)打開名爲index.html文件點擊 “Student”導航,在右側即可找到如下內容:
說明:如果@Documented元註解沒有修飾前面Override自定義註解,則生成的文檔不會有如上圖紅框框起的部分。
元註解——@Inherited
@Inherited:如果父類所使用的註解有@Inherited修飾,則子類可以繼承該註解,否則不能繼承。
Father類添加了由@Inherited元註釋所修飾的Bean自定義註解,所以有內容輸出;如果將@Inherited元註釋去掉,儘管Father類依然有Bean自定義註解,但卻沒有內容輸出。