亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
首頁 > Java > java教程 > 正文

一篇文章帶你看懂java中的注解

無忌哥哥
發(fā)布: 2018-07-23 10:45:14
原創(chuàng)
2321人瀏覽過

注解這個東西,只要是一個java的開放人員都不會陌生,但是我們用了那么多的注解,我們的注解是怎樣為我們工作的呢?通過前段時間的學習,我對注解有了一點新的理解。

一、什么是注解

注解在我們通俗的看來,就是一個對于annotation接口的一個實現(xiàn),他和類還有接口是處于同一個聲明和使用級別的,都繼承了object基類,并且都有.class屬性。

但是注解本身真的起作用嗎?

不信你自己定義一個注解試試,然后放在你的代碼上,結果就是毛用都沒有。

我們可以將注解看做是一個帶有屬性的標記,我們給我們的代碼打上這個標記,就意味著我們的代碼具有了注解所代表的某些特性了,但是不代表我們給他打上注解的一瞬間就有這種特性了。

我們的代碼在運行前是需要進行編譯的,有的時候在運行時我們也是需要進行動態(tài)編譯的,這個時候,如果我們嵌入了反射,或者動態(tài)代理的代碼去解析這個類,并給這個類加上他應有的特性,這個時候類才具有了注解所代表的意義。

立即學習Java免費學習筆記(深入)”;

舉個例子,比如我們在上幼兒園的時候,上廁所是需要舉手,然后老師帶領著去的,這個時候,舉手就代表你打上了上廁所的注解,如果老師不鳥你的話,你是上不了廁所的,只能憋著,如果老師這個時候掃視全班,發(fā)現(xiàn)你舉手了,她才會去你那里帶著你和一幫都在舉手的同學一起去上廁所。這個時候你才發(fā)揮了上廁所的本領。

二、實現(xiàn)

我們看到的注解,大部分其實都不是一開始java給你定義好的,一開始就規(guī)定了的注解只有最開始的四個元注解,他們分別是:

  • ? ?@Documented –注解是否將包含在JavaDoc中

  • ? ?@Retention –什么時候使用該注解

  • ?@Target –注解用于什么地方

  • @Inherited – 是否允許子類繼承該注解

@Documented ,這個注解的意思就是,在我們生成javaDoc的時候是否把這個類的說明,或者方法的說明放在我們的java文檔中。一般如果不用java自帶的項目文檔工具生成文檔的話是沒有什么用處的。

@Retention,這個注解表示了我們定義注解的生命周期,下面就是它的各種賦值和作用說明:

  1. RetentionPolicy.SOURCE : 在編譯階段丟棄。這些注解在編譯結束之后就不再有任何意義,所以它們不會寫入字節(jié)碼。@Override, @SuppressWarnings都屬于這類注解。

  2. ?RetentionPolicy.CLASS : 在類加載的時候丟棄。在字節(jié)碼文件的處理中有用。注解默認使用這種方式

    AI新媒體文章
    AI新媒體文章

    專為新媒體人打造的AI寫作工具,提供“選題創(chuàng)作”、“文章重寫”、“爆款標題”等功能

    AI新媒體文章75
    查看詳情 AI新媒體文章
  3. RetentionPolicy.RUNTIME : 始終不會丟棄,運行期也保留該注解,因此可以使用反射機制讀取該注解的信息。我們自定義的注解通常使用這種方式

@Target ,表示了注解用于什么地方的標記,默認為標記任何元素,可以給里面賦值ElementType的值:

  1. ?ElementType.CONSTRUCTOR:用于描述構造器

  2. ElementType.FIELD:成員變量、對象、屬性(包括enum實例)

  3. ElementType.LOCAL_VARIABLE:用于描述局部變量

  4. ?ElementType.METHOD:用于描述方法

  5. ElementType.PACKAGE:用于描述包

  6. ?ElementType.PARAMETER:用于描述參數(shù)

  7. 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在哪學?java怎么學才快?不用擔心,這里為大家提供了java速學教程(入門到精通),有需要的小伙伴保存下載就能學習啦!

下載
來源:php中文網
本文內容由網友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網:公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網訂閱號
每天精選資源文章推送
PHP中文網APP
隨時隨地碎片化學習
PHP中文網抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號