黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 技術分析之Java注解之基本原理介紹

技術分析之Java注解之基本原理介紹

更新時間:2020-07-28 16:49:33 來源:動力節點 瀏覽2438次

一.注解的本質

「java.lang.annotation.Annotation」接口中有這么一句話,用來描述『注解』。

The common interface extended by all annotation types

所有的注解類型都繼承自這個普通的接口(Annotation)

這句話有點抽象,但卻說出了注解的本質。我們看一個JDK內置注解的定義:

?Target(ElementType.METHOD)
?Retention(RetentionPolicy.SOURCE)
public interface Override{
}

這是注解 Override的定義,其實它本質上就是:

public interface Override extends Annotation{
}

沒錯,注解的本質就是一個繼承了Annotation接口的接口。有關這一點,你可以去反編譯任意一個注解類,你會得到結果的。

一個注解準確意義上來說,只不過是一種特殊的注釋而已,如果沒有解析它的代碼,它可能連注釋都不如。

解析一個類或者方法的注解往往有兩種形式,一種是編譯期直接的掃描,一種是運行期反射。

二.元注解

『元注解』是用于修飾注解的注解,通常用在注解的定義上。

JAVA中有以下幾個『元注解』:

 Target:注解的作用目標

 Retention:注解的生命周期

 Documented:注解是否應當被包含在JavaDoc文檔中

 Inherited:是否允許子類繼承該注解

1. Target

 Target注解指明該注解可以作用哪些對象上。

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public?@interface?Target?{
????/**
????????*?Returns?an?array?of?the?kinds?of?elements?an?annotation?type
????????*?can?be?applied?to.
????????*?@return?an?array?of?the?kinds?of?elements?an?annotation?type
????????*?can?be?applied?to
????????*/
????ElementType[]?value();
}

注解接收一個ElementType數組,ElementType是一個枚舉,成員如下:

ElementType.TYPE:允許被修飾的注解作用在類、接口和枚舉上

ElementType.FIELD:允許作用在屬性字段上

ElementType.METHOD:允許作用在方法上

ElementType.PARAMETER:允許作用在方法參數上

ElementType.CONSTRUCTOR:允許作用在構造器上

ElementType.LOCAL_VARIABLE:允許作用在本地局部變量上

ElementType.ANNOTATION_TYPE:允許作用在注解上

ElementType.PACKAGE:允許作用在包上

ElementType.TYPE_PARAMETER:允許作用在類型參數上

ElementType.TYPE_USE:允許作用在類型上

2. Retention

 Retention用于指明當前注解的生命周期

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public?@interface?Retention?{
????/**
????????*?Returns?the?retention?policy.
????????*?@return?the?retention?policy
????????*/
????RetentionPolicy?value();
}

注解接收一個RetentionPolicy數據,RetentionPolicy是個枚舉,成員如下:

RetentionPolicy.SOURCE:當前注解編譯期可見,不會寫入class文件

RetentionPolicy.CLASS:類加載階段丟棄,會寫入class文件

RetentionPolicy.RUNTIME:永久保存,可以反射獲取

三.Java的內置三大注解

 Override

 Deprecated標識類或方法不再推薦使用

 SuppressWarnings主要用來壓制java的警告

四.實現一個自己的注解

定義一個注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public?@interface?HelloAnnotation?{
????String?value()?default?"Hello?annotation!";
}

使用這個注解:

public?class?UseAnnotation?{
????@HelloAnnotation
????public?void?hello()?{
????????System.out.println("hello");
????}

????@HelloAnnotation("Hello?world!")
????public?void?helloWorld()?{
????????System.out.println("Hello?world!");
????}
}

注解最重要的部分在于對注解的處理。注解處理器就是通過反射機制獲取被檢查方法上的注解信息,然后根據注解元素的值進行特定的處理。如果沒有注解處理器,注解就是個注釋,或者連注釋都不如。

處理這個注解:

public?class?Test?{
????public?static?void?main(String[]?args)?{
????????testAnnotation(UseAnnotation.class);
????}
????private?static?void?testAnnotation(Class?cl)?{
????????for?(Method?m?:?cl.getDeclaredMethods())?{
????????????HelloAnnotation?ha?=?m.getAnnotation(HelloAnnotation.class);
????????????if?(ha?!=?null)?{
????????????????System.out.println("Found?My?Annotation:?"?+?ha.value());
????????????}
????????}
????}
}

輸出結果:
Found?My?Annotation:?Hello?annotation!
Found?My?Annotation:?Hello?world!

什么是Java注解:http://www.ilovecolors.com.cn/tutorial_java_advance/1055.html

以上就是動力節點java培訓機構的小編針對“技術分析之Java注解之基本原理介紹”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 色偷偷网址 | 国产成人高清亚洲一区91 | 天天做天天爱天天做天天吃中 | 欧美成人在线视频 | 成 人 亚洲 综合天堂 | 久久香蕉精品视频 | 好吊日在线视频 | 免费一级欧美在线观看视频片 | 亚洲乱乱 | 波多野结衣xxxx性精品 | 亚洲欧美日韩在线观看二区 | 男女爽爽无遮拦午夜视频 | 欧美激情在线精品三区 | 2021精品国夜夜天天拍拍 | 一本一本大道香蕉久在线精品 | 日产国产精品亚洲系列 | 星空影院免费观看韩国三集 | 久久久青草青青亚洲国产免观 | 亚洲欧洲在线观看 | 爽爽爽爽爽爽爽太爽了免费观看 | 国产一级特黄 | 久久国产亚洲欧美日韩精品 | 在线免费黄色 | 亚洲狠狠婷婷综合久久久图片 | 精品一区二区三区在线观看 | 午夜性爽快免费视频播放 | 香蕉久久夜色精品国产小优 | 久久综合草 | 丝袜美腿综合 | 欧美性另类69xxxx | 国产精品欧美日韩视频一区 | 站长推荐国产精品视频 | 天天爱天天做天天爽夜夜揉 | 91精品国产人成网站 | 瑟瑟漫画在线观看 | 一级生活毛片 | 日韩精品一二三区 | 国产一区玩具在线观看 | 免费视频a | 亚洲欧美人成人让影院 | 午夜视频在线观看国产 |