java注解_Java注解教程及自定義注解

Java注解提供了關于代碼的一些信息,但并不直接作用于它所注解的代碼內容。在這個教程當中,我們將學習Java的注解,如何定制注解,注解的使用以及如何通過反射解析注解。

Java1.5引入了注解,當前許多java框架中大量使用注解,如Hibernate、Jersey、Spring。注解作為程序的元數據嵌入到程序當中。注解可以被一些解析工具或者是編譯工具進行解析。我們也可以聲明注解在編譯過程或執行時產生作用。

在使用注解之前,程序源數據只是通過java注釋和javadoc,但是注解提供的功能要遠遠超過這些。注解不僅包含了元數據,它還可以作用于程序運行過程中、注解解釋器可以通過注解決定程序的執行順序。例如,在Jersey webservice 我們為方法添加URI字符串的形式的**PATH**注解,那么在程序運行過程中jerser解釋程序將決定該方法去調用所給的URI。

創建Java自定義注解

創建自定義注解和創建一個接口相似,但是注解的interface關鍵字需要以@符號開頭。我們可以為注解聲明方法。我們先來看看注解的例子,然后我們將討論他的一些特性。

9142e14a9f07d558606a2cbf5e177861.png
  • 注解方法不能帶有參數;
  • 注解方法返回值類型限定為:基本類型、String、Enums、Annotation或者是這些類型的數組;
  • 注解方法可以有默認值;
  • 注解本身能夠包含元注解,元注解被用來注解其它注解。

這里有四種類型的元注解:

1. @Documented —— 指明擁有這個注解的元素可以被javadoc此類的工具文檔化。這種類型應該用于注解那些影響客戶使用帶注釋的元素聲明的類型。如果一種聲明使用Documented進行注解,這種類型的注解被作為被標注的程序成員的公共API。

2. @Target——指明該類型的注解可以注解的程序元素的范圍。該元注解的取值可以為TYPE,METHOD,CONSTRUCTOR,FIELD等。如果Target元注解沒有出現,那么定義的注解可以應用于程序的任何元素。

3. @Inherited——指明該注解類型被自動繼承。如果用戶在當前類中查詢這個元注解類型并且當前類的聲明中不包含這個元注解類型,那么也將自動查詢當前類的父類是否存在Inherited元注解,這個動作將被重復執行知道這個標注類型被找到,或者是查詢到頂層的父類。

4.@Retention——指明了該Annotation被保留的時間長短。RetentionPolicy取值為SOURCE,CLASS,RUNTIME。

Java內建注解

Java提供了三種內建注解。

1. @Override——當我們想要復寫父類中的方法時,我們需要使用該注解去告知編譯器我們想要復寫這個方法。這樣一來當父類中的方法移除或者發生更改時編譯器將提示錯誤信息。

2. @Deprecated——當我們希望編譯器知道某一方法不建議使用時,我們應該使用這個注解。Java在javadoc 中推薦使用該注解,我們應該提供為什么該方法不推薦使用以及替代的方法。

3. @SuppressWarnings——這個僅僅是告訴編譯器忽略特定的警告信息,例如在泛型中使用原生數據類型。它的保留策略是SOURCE(譯者注:在源文件中有效)并且被編譯器丟棄。

我們來看一個java內建注解的例子參照上邊提到的自定義注解。

586bba0e1755cad5235033e095176467.png

相信這個例子可以不言自明并能展示在不同場景下的應用。

Java注解解析

我們將使用反射技術來解析java類的注解。那么注解的RetentionPolicy應該設置為RUNTIME否則java類的注解信息在執行過程中將不可用那么我們也不能從中得到任何和注解有關的數據。

da6e893a62c583094147ef0aa91cb9c2.png

運行上面程序將輸出:

100abbea2cf4dd6ef38f22ca3ab5709f.png

這就是該教程的全部內容,希望你可以從中學到些東西。

05efc617d7279419d42133394b800964.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537355.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537355.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git設置忽略eclipse配置文件

概述 eclipse的配置文件是不能公用的,不同電腦上的eclipse配置文件內容是不一樣的,如果將eclipse配置文件上傳到了git,其他開發下載后,導入項目,有些報錯就是因為配置文件關系 操作 在git的忽略文件“.gitignore”里…

MySQL 時間函數

A. timestampdiff() 傳三個參數,第一個時間類型如年,月,日,第二個開始時間,第三個結束時間select test_name, timestampdiff(YEAR,create_time,end_time) y_date from test_table; --計算時間 -------------------| te…

jdk安裝包_第一章(第1節):安裝JDK

對于 jdk 的安裝,網上有很多種圖文解說,但是老鳥發現它們大都不嚴謹,非常不適合小白。本節課,老鳥就給大家做個小白教程,無論你多么菜,你一定可以安裝上,否則你加我微信,我給你打五毛…

eclipse 國內鏡像高速下載

概述 eclipse是優秀的老牌IDE,使用eclipse是一種身份的象征,代表了老程序員。eclipse每年都會更新,也越來越好用。但下載的時候,速度一直有點慢,eclipse官網提供了國內鏡像,下載很快。 操作步驟 第一步&…

matlab圖像去毛刺_警微圈 圖像處理第三講CLAHE

警微圈圖像處理100講 第三講《限制對比度自適應直方圖均衡化》- 圈語 -為給圈粉們提供一些結合公安工作的實用圖像處理方法,小編為大家準備了一些程序處理算法(附帶代碼)。小編使用的圖像處理軟件是matlab(該軟件關注警微圈后臺回復“matlab”即可獲得下載資源)&…

Java 使用 POI 操作 Excel

Apache POI 基本介紹 Apache POI 是 Apache 軟件基金會提供的 100% 開源庫。支持 Excel 庫的所有基本功能。 圖片來源:易百教程 基本概念 在 POI 中,Workbook代表著一個 Excel 文件(工作簿),Sheet代表著 Workbook 中的…

Microsoft Project 變更項目日歷的注意事項

場景 今天在修改一份mpp排期計劃里的項目日歷,日歷是設置了周末2天加班,變更后發現,排期縮短的天數不對。一開始以為是Project軟件出問題了,與windows11不兼容,重啟了電腦,重試后還是這樣,后來…

python共享單車案例分析_python分析數據分析項目:共享單車租用情況影響因素探索分析...

python分析數據分析項目:共享單車租用情況影響因素探索分析

第十九節TypeScript 模塊

1、TypeScript模塊: 模塊是在其自身的作用域里執行,并不是在全局作用域,這意味著定義在模塊里面的變量、函數和類等在模塊外部是不可見的,除非明確地使用 export 導出它們。類似地,我們必須通過 import 導入其他模塊導…

微軟宣布 Edge 瀏覽器將切換至 Chromium 內核

簡述 據微軟官方 blog的消息,windows 的默認瀏覽器 Edge將切換內核至 Chromium,并且微軟將秉承開源精神,在未來更多的為 Chromium項目貢獻代碼。 微軟具體說了什么? 原文如下: For the past few years, Microsoft has …

解決the resource is not on the build path of a java project

場景 普通的Java project 轉maven 項目后,導入類提示:the resource is not on the build path of a java project 解決方法 將檢查java build source,將報錯的刪除,重新添加src資源包

python實現按回車鍵繼續程序_python實現按任意鍵繼續執行程序

在windows下寫bat的時候,通過pause命令,可以暫停程序運行,例如經常見的程序會在終端提示”按任意鍵繼續……”,用戶在終端回車后程序可以接著運行,這個功能有多大用途今天暫且不說,但我覺得應該有很多人也想在python下…

Beta

目錄 過去存在的問題任務分工規范后端總結卉卉家燦前端總結緒佩青元愷琳宇恒丹丹算法&API接口家偉鴻杰一好文檔&博客撰寫政演產品功能我們已經坐了哪些調整桌面控件合并我們會在Beta沖刺中做哪些改進組長博客:https://www.cnblogs.com/heihuifei/p/10084535…

項目驗收文檔合并技巧

1)先將各個文件word寫好,格式,字體調整好; 2)每個word導出PDF; 3)將導出的PDF合并到一個大的PDF;

xsl判斷節點存在_HashMap1.8之節點刪除分析

HashMap之節點刪除大家一直關注的都是HashMap如何添加節點,當節點數量大于8的時候轉化為紅黑樹,否則使用鏈表等等,但大家是否有看過刪除節點的處理邏輯呢? 今天來看看HashMap刪除節點的神來之筆問題來源在查看HashMap源碼時&#…

用Emit技術替代反射

System.Reflection.Emit命名空間類可用于動態發出Microsoft中間語言(MSIL)代碼,以便生成的代碼可以直接執行。反射也用于獲取有關類及其成員的信息。換句話說,反射是一種技術,允許您檢查描述類型及其成員的元數據&…

windows安裝TortoiseGit詳細使用教程

windows安裝TortoiseGit詳細使用教程【基礎篇】_小飛牛的技術博客_51CTO博客windows安裝TortoiseGit詳細使用教程【基礎篇】,環境:win8.164bit安裝準備:首先你得安裝windows下的git msysgit1.9.5安裝版本控制器客戶端tortoisegit tortoisegit…

keras中文文檔_【DL項目實戰02】圖像識別分類——Keras框架+卷積神經網絡CNN(使用VGGNet)

版權聲明:小博主水平有限,希望大家多多指導。目錄:【使用傳統DNN】BG大龍:【DL項目實戰02】圖像分類——Keras框架使用傳統神經網絡DNN?zhuanlan.zhihu.com【使用卷積神經網絡CNN】BG大龍:【DL項目實戰02】圖像識別分…

Java Html轉pdf實戰

Java Html轉pdf實戰 - 簡書年尾手頭沒啥事,干起了打雜工作,最近幫忙解決后端項目里一個html批量轉pdf速度慢的問題,項目里用到的轉換工具是 wkhtmltopdf ,這貨轉單個html還好,批量轉速...https://www.jianshu.com/p/d0…

Hadoop生態圈-Ambari控制臺功能簡介

Hadoop生態圈-Ambari控制臺功能簡介 作者:尹正杰 版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 在經歷一系列安裝過程之后(部署過HDP后我終于發現為什么大家喜歡用它了,部署比CDH簡單是他優勢之一&…