一篇文章帶你看懂java中的註解
註解這個東西,只要是一個java的開放人員都不會陌生,但是我們用了那麼多的註解,我們的註解是怎樣為我們工作的呢?透過前段時間的學習,我對註解有了一點新的理解。
一、什麼是註解
註解在我們通俗的看來,就是一個對於Annotation介面的一個實現,他和類別還有介面是處於同一個宣告和使用層級的,都繼承了Object基類,並且都有.class屬性。
但是註解本身真的起作用嗎?
不信你自己定義一個註解試試,然後放在你的程式碼上,結果就是毛用都沒有。
我們可以將註解看做是一個帶有屬性的標記,我們給我們的程式碼打上這個標記,就意味著我們的程式碼具有了註解所代表的某些特性了,但是不代表我們給他打上註解的一瞬間就有這種特性了。
我們的程式碼在運行前是需要進行編譯的,有的時候在運行時我們也是需要進行動態編譯的,這個時候,如果我們嵌入了反射,或者動態代理的程式碼去解析這個類,並給這個類加上他應有的特性,這個時候類才具有了註解所代表的意義。
舉個例子,例如我們在上幼兒園的時候,上廁所是需要舉手,然後老師帶領著去的,這個時候,舉手就代表你打上了上廁所的註解,如果老師不鳥你的話,你是上不了廁所的,只能憋著,如果老師這個時候掃視全班,發現你舉手了,她才會去你那裡帶著你和一群都在舉手的同學一起去上廁所。這時候你才發揮了上廁所的本領。
二、實作
我們看到的註解,大部分其實都不是一開始java給你定義好的,一開始就規定了的註解只有最開始的四個元註解,他們分別是:
@Documented –註解是否將包含在JavaDoc中
-
@Retention –什麼時候使用該註解
@Target –註解用於什麼地方
#@Inherited – 是否允許子類別繼承該註解
#@Documented ,這個註解的意思是,在我們產生javaDoc的時候是否把這個類別的說明,或者方法的說明放在我們的java文件中。一般如果不用java自備的專案文檔工具產生文檔的話是沒有什麼用處的。
@Retention,這個註解表示了我們定義註解的生命週期,以下就是它的各種賦值和作用說明:
RetentionPolicy.SOURCE : 在編譯階段丟棄。這些註解在編譯結束之後就不再有任何意義,所以它們不會寫入字節碼。 @Override, @SuppressWarnings都屬於這類註解。
RetentionPolicy.CLASS : 在類別載入的時候丟棄。在字節碼檔案的處理中有用。註解預設使用這種方式
RetentionPolicy.RUNTIME : 永遠不會丟棄,運行期也保留該註解,因此可以使用反射機制讀取該註解的資訊。我們自訂的註解通常使用這種方式
@Target ,表示了註解用於什麼地方的標記,預設為標記任何元素,可以給裡面賦值ElementType的值:
ElementType.CONSTRUCTOR:用於描述建構器
-
#ElementType.FIELD:成員變數、物件、屬性(包含enum實例)
ElementType.LOCAL_VARIABLE:用來描述局部變數
ElementType.METHOD:用來描述方法
ElementType.PACKAGE:用於描述套件
ElementType.PARAMETER:用於描述參數
ElementType.TYPE:用於描述類別、接口(包括註解類型) 或enum宣告
@Inherited ,定義該註解和子類別的關係,@Inherited 元註解是一個標記註解,@Inherited闡述了某個被標註的類型是被繼承的。如果一個使用了@Inherited修飾的annotation類型被用於一個class,則這個annotation將被用於該class的子類別。
我們可以自訂一個註解:
import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * 水果名称注解 */ @Target(FIELD) @Retention(RUNTIME) @Documented public @interface FruitName { String value() default ""; }
上述的元註解就是為了自訂註解服務的。
三、總結
總之,註解就是一個用來標記程式碼的標記,我們可以透過掃描不同的註解來實現不同的註解方法,透過java的動態代理和反射我們可以輕鬆的獲得我們註解標記的內容,從而操作我們寫好的類別或方法,下篇文章,我將定義一個自訂的註解,並寫出他的實作。
以上是一篇文章帶你看懂java中的註解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何在Java中使用註解函數實作自訂註解註解(Annotation)是Java中的一種特殊的語法元素,它可以用來為程式碼添加元資料訊息,以便在運行時進行解析和處理。 Java提供了一些預先定義的註解(如@Override、@Deprecated等),同時也支援使用者自訂註解。在某些場景下,使用自訂的註解可以使程式碼更簡潔、可讀性更強。本文將介紹如何在Java中使

如何解決:Java註解錯誤:註解參數類型錯誤引言:在Java開發中,註解(Annotation)是一種元資料的形式,用於為程式元素(類別、方法、欄位等)添加額外的資訊。然而,有時我們可能會遇到註解參數類型錯誤的問題,這會導致編譯錯誤或執行時異常。本文將介紹解決Java註解參數類型錯誤的方法,並提供程式碼範例幫助讀者更好地理解。理解註解參數類型錯誤:註解參數類型錯

註解的作用域決定了它們應用於程式碼的哪些部分,而生命週期描述了它們在程式碼中的存在時間。作用域有元素級別、聲明類型級別和程式碼區塊級別,生命週期分編譯時、類別載入時和執行時。註解的生命週期包括編譯時被加入到class檔案中,類別載入時被JVM處理,運行時可透過反射存取。

解決Java註解解析異常(AnnotationParsingException)的方法引言:在Java開發中,註解成為了一種非常重要的技術,它可以透過在原始碼中加入元資料的方式,來描述程式中的各種資訊。而在使用註解的過程中,有時我們可能會遇到AnnotationParsingException異常,這個異常代表了在解析註解時發生的錯誤。本文將介紹如何解決這個

深入理解Java註解開發的經驗與建議隨著Java語言的發展,註解(Annotation)成為了Java開發中不可或缺的一部分。作為一種元數據,註解可以為程式碼添加額外的描述訊息,幫助開發者更好地理解程式碼邏輯。同時,註解還可以在編譯時期和運行時期進行處理,以實現自動化的功能。在日常的Java開發中,我們常會使用到註解。然而,要深入理解和有效地應用註解,就需要掌握一

如何解決:Java註解錯誤:未定義的註解在使用Java開發過程中,註解是一種十分常見的技術手段,可以用來為程式碼添加一些額外的資訊或行為。然而,有時候我們可能會遇到一個錯誤:未定義的註解。這個問題在編譯或執行時會導致程式無法正常運作,因此解決這個錯誤顯得十分重要。本文將介紹一些解決未定義註解錯誤的方法,並提供一些程式碼範例。一、檢查註解的導包當我們使用一個自

Java中的註解處理器Java中的註解處理器是一種能夠偵測和處理Java程式碼中註解的工具。使用註解處理器可以增強編譯時檢查,產生額外的程式碼,甚至修改已有程式碼,從而提高程式碼的可讀性、可維護性和可重複使用性。註解處理器通常是編寫在Java中的,而不是在執行時解釋和執行的。這為註解處理器提供了許多方便,例如可以使用更豐富的Java類型系統、物件導向特性和

如何透過Java的註解實現自訂的元資料?引言:在Java開發過程中,我們經常需要為類別、方法、屬性等元素添加一些額外的訊息,以便在執行時進行處理。 Java的註解(Annotation)機制為我們提供了一種靈活的方式來實現自訂的元數據,使得我們可以在編碼過程中更加便捷地添加和使用額外的資訊。本文將介紹如何透過Java的註解機制實作自訂的元數據,並給出對應的
