您好,登錄后才能下訂單哦!
這篇文章主要介紹“java注解與元注解實例分析”,在日常操作中,相信很多人在java注解與元注解實例分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”java注解與元注解實例分析”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Annotation(注解)也被稱為元數據(Metadata)是JDK1.5及以后版本引入的,用于修飾解釋 包、類、方法、屬性、構造器、局部變量等數據信息。它可以用于創建文檔,跟蹤代碼中的依賴性,甚至執行基本編譯時檢查。
注解是以‘@注解名’在代碼中存在的,根據注解參數的個數,我們可以將注解分為:標記注解、單值注解、完整注解三類。和注釋一樣,注解不影響程序邏輯,但注解可以被編譯或運行,相當于嵌入在代碼中的補充信息。
另外,你可以在編譯時選擇代碼里的注解是否只存在于源代碼級,或者它也能在class文件、或者運行時中出現(SOURCE/CLASS/RUNTIME)。
在 JavaSE 中,注解的使用目的比較簡單,例如標記過時的功能,忽略警告等。在 JavaEE 中注解占據了更重要的角色,例如用來配置應用程序的任何切面,代替 java EE 舊版中所遺留的繁冗代碼和 XML 配置等。
@Override : 限定某個方法,是重寫父類方法 , 該注解只能用于方法
@Deprecated : 用于表示某個程序元素 ( 類 , 方法等 ) 已過時
@SuppressWarnings : 抑制編譯器警告
@Override
class Son extends Father{ @Override public void play(){} }
注意:
@Override 表示子類的 play 方法時重寫了父類的 play
這里如果沒有寫 @Override 還是會重寫了父類 ply
如果你寫了@Override 注解,編譯器就會去檢查該方法是否真的重寫了父類的 方法,如果的確重寫了,則編譯通過,如果沒有構成重寫,則編譯錯誤。
@Override 只能修飾方法,不能修飾其它類、包、屬性等。
@Deprecated
@Deprecated class A{ @Deprecated public static int name = 1; @Deprecated public void play(){ } }
注意:
已過時不是不能使用,只是不推薦使用,但是仍然可以使用
可以修飾方法,類,字段, 包, 參數 等
它的作用是可以做到新舊版本的兼容和過渡
@SuppressWarnings
@SuppressWarnings ("all") public class word{ }
注意:
關于 SuppressWarnings 作用范圍是和你放置的位置相關。比如@SuppressWarnings 放置在 main 方法,那么抑制警告的范圍就是 main
通過 @SuppressWarnings 的源碼可知,其注解目標為類、字段、函數、函數入參、構造函數和函數的局部變量。
關鍵字 | 解釋 |
---|---|
all | 抑制所有警告 |
boxing | 抑制與封裝/拆裝作業相關的警告 |
cast | 抑制與強制轉型作業相關的警告 |
dep-ann | 抑制與淘汰注釋相關的警告 |
deprecation | 抑制與淘汰的相關警告 |
fallthrough | 抑制與 switch 陳述式中遺漏 break 相關的警告 |
finally | 抑制與未傳回 finally 區塊相關的警告 |
hiding | 抑制與隱藏變數的區域變數相關的警告 |
incomplete-switch | 抑制與 switch 陳述式(enum case)中遺漏項目相關的警告 |
javadoc | 抑制與 javadoc 相關的警告 |
nls | 抑制與非 nls 字串文字相關的警告 |
null | 抑制與空值分析相關的警告 |
rawtypes | 抑制與使用 raw 類型相關的警告 |
resource | 抑制與使用 Closeable 類型的資源相關的警告 |
restriction | 抑制與使用不建議或禁止參照相關的警告 |
serial | 抑制與可序列化的類別遺漏 serialVersionUID 欄位相關的警告 |
static-access | 抑制與靜態存取不正確相關的警告 |
static-method | 抑制與可能宣告為 static 的方法相關的警告 |
super | 抑制與置換方法相關但不含 super 呼叫的警告 |
synthetic-access | 抑制與內部類別的存取未最佳化相關的警告 |
sync-override | 抑制因為置換同步方法而遺漏同步化的警告 |
unchecked | 抑制與未檢查的作業相關的警告 |
unqualified-field-access | 抑制與欄位存取不合格相關的警告 |
unused | 抑制與未用的程式碼及停用的程式碼相關的警告 |
? 什么是元注解:
元注解就是解釋注解的注解,它注解的對象是我們前面介紹的注解,如:@Override、@Deprecated 、@SuppressWarnings
? 四種元注解:
Retention:指定注解的作用范圍,三種 SOURCE,CLASS,RUNTIME
Target:指定注解可以在哪些地方使用
Documented :指定該注解是否會在 javadoc 體現
Inherited:子類會繼承父類注解
? 注解的注意事項:
注解僅存在于源碼中,在class字節碼文件中不包含
默認的保留策略,注解會在class字節碼文件中存在,但運行時無法獲得,
注解會在class字節碼文件中存在,在運行時可以通過反射獲取到
首先要明確生命周期長度 SOURCE < CLASS < RUNTIME ,前者能作用的地方后者一定也能作用。
①:一般如果需要在 運行時去動態獲取注解信息,那只能用 RUNTIME 注解;
②:如果要在 編譯時進行一些預處理操作,比如生成一些輔助代碼(如 ButterKnife),就用 CLASS注解;
③:如果只是做一些 檢查性的操作如 @Override 和 @SuppressWarnings,則可選用 SOURCE 注解。
2、Retention注解
解釋:
只能用于修飾一個 Annotation 定義, 用于指定該 Annotation 可以保留多長時間,@Rentention 包含一個 RetentionPolicy 類型的成員變量, 使用 @Rentention 時必須為該 value 成員變量指定值(值有三種)。
三種值:
RetentionPolicy.SOURCE: 編譯器使用后,直接丟棄這種策略的注釋。
RetentionPolicy.CLASS: 編譯器將把注解記錄在 class 文件中 . 當運行 Java 程序時 , JVM 不會保留注解。 這是默認值。
RetentionPolicy.RUNTIME: 編譯器將把注解記錄在 class 文件中 . 當運行 Java 程序時 , JVM 會保留注解 . 程序可以 通過反射獲取該注解。
3、Target 注解
解釋:
用于修飾 Annotation 定義,指定被修飾的 Annotation 能用于修飾哪些程序元素。@Target 也包含一個名為 value 的成員變量。
4、Documented 注解
解釋:
@Documented: 用于指定被該元注解修飾的 Annotation 類將被javadoc 工具提取成文檔,即在生成文檔時,可以看到該注解。
注意:
定義為@Documented 的注解必須設置Retention值為RUNTIME。
5、Inherited 注解
解釋:
被@Inherited 修飾的注解 將具有繼承性,如果某個類使用了被 @Inherited修飾的注解,則其子類將自動具有該注解
到此,關于“java注解與元注解實例分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。