注解這個東西,只要是一個java的開放人員都不會陌生,但是我們用了那么多的注解,我們的注解是怎樣為我們工作的呢?通過前段時間的學習,我對注解有了一點新的理解。
注解在我們通俗的看來,就是一個對于annotation接口的一個實現(xiàn),他和類還有接口是處于同一個聲明和使用級別的,都繼承了object基類,并且都有.class屬性。
但是注解本身真的起作用嗎?
不信你自己定義一個注解試試,然后放在你的代碼上,結果就是毛用都沒有。
我們可以將注解看做是一個帶有屬性的標記,我們給我們的代碼打上這個標記,就意味著我們的代碼具有了注解所代表的某些特性了,但是不代表我們給他打上注解的一瞬間就有這種特性了。
我們的代碼在運行前是需要進行編譯的,有的時候在運行時我們也是需要進行動態(tài)編譯的,這個時候,如果我們嵌入了反射,或者動態(tài)代理的代碼去解析這個類,并給這個類加上他應有的特性,這個時候類才具有了注解所代表的意義。
立即學習“Java免費學習筆記(深入)”;
舉個例子,比如我們在上幼兒園的時候,上廁所是需要舉手,然后老師帶領著去的,這個時候,舉手就代表你打上了上廁所的注解,如果老師不鳥你的話,你是上不了廁所的,只能憋著,如果老師這個時候掃視全班,發(fā)現(xiàn)你舉手了,她才會去你那里帶著你和一幫都在舉手的同學一起去上廁所。這個時候你才發(fā)揮了上廁所的本領。
我們看到的注解,大部分其實都不是一開始java給你定義好的,一開始就規(guī)定了的注解只有最開始的四個元注解,他們分別是:
? ?@Documented –注解是否將包含在JavaDoc中
? ?@Retention –什么時候使用該注解
?@Target –注解用于什么地方
@Inherited – 是否允許子類繼承該注解
@Documented ,這個注解的意思就是,在我們生成javaDoc的時候是否把這個類的說明,或者方法的說明放在我們的java文檔中。一般如果不用java自帶的項目文檔工具生成文檔的話是沒有什么用處的。
@Retention,這個注解表示了我們定義注解的生命周期,下面就是它的各種賦值和作用說明:
RetentionPolicy.SOURCE : 在編譯階段丟棄。這些注解在編譯結束之后就不再有任何意義,所以它們不會寫入字節(jié)碼。@Override, @SuppressWarnings都屬于這類注解。
?RetentionPolicy.CLASS : 在類加載的時候丟棄。在字節(jié)碼文件的處理中有用。注解默認使用這種方式
RetentionPolicy.RUNTIME : 始終不會丟棄,運行期也保留該注解,因此可以使用反射機制讀取該注解的信息。我們自定義的注解通常使用這種方式
@Target ,表示了注解用于什么地方的標記,默認為標記任何元素,可以給里面賦值ElementType的值:
?ElementType.CONSTRUCTOR:用于描述構造器
ElementType.FIELD:成員變量、對象、屬性(包括enum實例)
ElementType.LOCAL_VARIABLE:用于描述局部變量
?ElementType.METHOD:用于描述方法
ElementType.PACKAGE:用于描述包
?ElementType.PARAMETER:用于描述參數(shù)
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 ""; }
上述的元注解就是為了自定義注解服務的。
總之,注解就是一個用來標記代碼的標記,我們可以通過掃描不同的注解來實現(xiàn)不同的注解方法,通過java的動態(tài)代理和反射我們可以輕松的獲得我們注解標記的內容,從而操作我們寫好的類或者方法,下篇文章,我將定義一個自定義的注解,并寫出他的實現(xiàn)。
以上就是一篇文章帶你看懂java中的注解的詳細內容,更多請關注php中文網其它相關文章!
java怎么學習?java怎么入門?java在哪學?java怎么學才快?不用擔心,這里為大家提供了java速學教程(入門到精通),有需要的小伙伴保存下載就能學習啦!
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號