亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的注解、元注解詳細(xì)解析

 更新時間:2023年11月28日 09:02:06   作者:四葉草  
這篇文章主要介紹了Java中的注解、元注解詳細(xì)解析,注解也叫元數(shù)據(jù),與類、接口、枚舉是在同一個層次,它可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等的前面,用來對這些元素進(jìn)行說明,注釋,需要的朋友可以參考下

1.注解概述

  • JDK5.0新增 — 注解(Annotation),也叫元數(shù)據(jù)。與類、接口、枚舉是在同一個層次,它可以聲明在包、類、字段、方法、局部變量、方法參數(shù)等的前面,用來對這些元素進(jìn)行說明,注釋。
  • Annotation 可以像修飾符一樣被使用,可用于修飾包,類,構(gòu)造器,方法,成員變量,參數(shù),局部變量的聲明,這些信息被保存在Annotation的"name=value"對中。在JavaSE中,注解的使用目的比較簡單,例如標(biāo)記過時的功能,忽略警告等。在JavaEE/ArIdroid中注解占據(jù)了更重要的角色,例如用來配置應(yīng)用程序的任何切面,代替JavaEE舊版中所遺留的繁冗代碼和XML配置等。未來的開發(fā)模式都是基于注解的,JPA(java的持久化API)是基于注解的,Spring2.5以后都是基于注解的,Hibernate3.x以后也是基于注解的,注解是一種趨勢,一定程度上可以說 :框架=注解+反射+設(shè)計模式。

2.注解分類

作用分類:

  • 編寫文檔: 通過代碼里標(biāo)識的元數(shù)據(jù)生成文檔【生成文檔doc文檔】
  • 代碼分析: 通過代碼里標(biāo)識的元數(shù)據(jù)對代碼進(jìn)行分析【使用反射】
  • 編譯檢查: 通過代碼里標(biāo)識的元數(shù)據(jù)讓編譯器能夠?qū)崿F(xiàn)基本的編譯檢查【Override等】

注解可以根據(jù)注解參數(shù)分為三大類:

  • 標(biāo)記注解: 沒有參數(shù)的注解,僅用自身的存在與否為程序提供信息,如@Override注解,該注解沒有參數(shù),用于表示當(dāng)前方法為重寫方法。
  • 單值注解: 只有一個參數(shù)的注解,如果該參數(shù)的名字為value,那么可以省略參數(shù)名,如 @SuppressWarnings(value = “all”),可以簡寫為@SuppressWarnings(“all”)。
  • 完整注解: 有多個參數(shù)的注解。

3.三種基本的Annotaton

3.1**@Override**

  • 限定某個方法,是重寫父類方法 , 該注解只能用于方法
  • 在子類中去實(shí)現(xiàn)父類的方法,就會在方法上有@Override注解,假如我們試圖去重寫eat方法名稱,會發(fā)現(xiàn)在編譯期就報錯了,就說明該方法不是我們重寫其父類(eat)的方法

3.2**@Deprecated**

  • 用于表示某個程序元素 ( 類 , 方法等,字段, 包, 參數(shù) ) 已過時
  • 已過時不是不能使用,只是不推薦使用,但是仍然可以使用

3.3**@SuppressWarnings**

  • 關(guān)于 SuppressWarnings 作用范圍是和你放置的位置相關(guān)。比如@SuppressWarnings 放置在 main 方法,那么抑制警告的范圍就是 main
  • 通過 @SuppressWarnings 的源碼可知,其注解目標(biāo)為類、字段、函數(shù)、函數(shù)入?yún)ⅰ?gòu)造函數(shù)和函數(shù)的局部變量。
  • @SuppressWarnings在IDEA中不明顯,在eclipse中有顯示黃色警告。

unchecked:未檢查的轉(zhuǎn)化,如集合沒有指定類型還添加元素
unused:未使用的變量
resource:有泛型未指定類型
path:在類路徑,原文件路徑中有不存在的路徑
deprecation:使用了某些不贊成使用的類和方法
fallthrough:switch語句執(zhí)行到底沒有break關(guān)鍵字
rawtypes:沒有寫泛型,比如: List list = new ArrayList();
all:全部類型的警告

4.元注解(重點(diǎn))

  • 元注解是用于修飾其它注解的注解

四種元注解:

  • @Documented:指定了被修飾的注解是可以Javadoc等工具文檔化
  • @Retention:指定了被修飾的注解的生命周期
  • @Target:指定被修飾的注解的作用范圍
  • @Inherited:指定了被修飾的注解修飾程序元素的時候是可以被子類繼承的

4.1**@Documented**

  • 用于指定被該元注解修飾的注解類將被javadoc工具提取成文檔。默認(rèn)情況下,javadoc是 不包括注解的,但是加上了這個注解生成的文檔中就會帶著注解了。
  • 定義為@Documented 的注解必須設(shè)置Retention值為RUNTIME。

4.2@Retention

只能用于修飾一個 Annotation 定義, 用于指定該 Annotation 可以保留多長時間,@Rentention 包含一個 RetentionPolicy 類型的成員變量, 使用 @Rentention 時必須為該 value 成員變量指定值(值有三種)。

三種值

  • RetentionPolicy.SOURCE: 編譯器使用后,直接丟棄這種策略的注釋。
  • RetentionPolicy.CLASS: 編譯器將把注解記錄在 class 文件中 . 當(dāng)運(yùn)行 Java 程序時 , JVM 不會保留注解。 這是默認(rèn)值。
  • RetentionPolicy.RUNTIME: 編譯器將把注解記錄在 class 文件中 . 當(dāng)運(yùn)行 Java 程序時 , JVM 會保留注解 . 程序可以 通過反射獲取該注解。

注意: 我們常用的定義即是RetentionPolicy.RUNTIME,因為我們使用反射來實(shí)現(xiàn)的時候是需要從JVM中獲取class類對象并操作類對象的。

三個生命周期是 源碼階段 - > class類對象階段 - > Runtime運(yùn)行時階段。

4.3**@Target**

用于修飾注解的注解,用于指定被修飾的注解能用于修飾哪些程序元素。@Target也包含一個名為value的成員變量。

ANNOTATION_TYPE 用于描述注解
CONSTRUCTOR 用于描述構(gòu)造方法
FIELD 用于描述屬性
LOCAL_VARIABLE 用于描述局部變量
METHOD 用于描述方法
PACKAGE 用于描述包
PARAMETER 用于描述方法內(nèi)的參數(shù)
TYPE 用于描述類型進(jìn)行注解,比如類、接口、枚舉

4.4**@Inherited**

被它修飾的Annotation將具有繼承性。如果某個類使用了被@Inherited修飾的Annotation,則其子類將自動具有該注解。

5.自定義注解

格式:public @Interface 注解名 {

屬性列表/無屬性

}

注解體中的屬性要求(返回值類型):

1、基本數(shù)據(jù)類型

2、String類型

3、枚舉類型

4、注解

5、以上類型的數(shù)組

注解的屬性也叫做成員變量。注解只有成員變量,沒有方法。

注意:

  • 在這里不能有void的無返回值類型和以上類型以外的類型
  • 定義的屬性,在使用時需要給注解中的屬性賦值
  • 如果定義屬性時,使用default關(guān)鍵字給屬性默認(rèn)初始化值,則使用注解時可以不為屬性賦值,它取的是默認(rèn)值。如果為它再次傳入值,那么就發(fā)生了對原值的覆蓋。
  • 如果只有一個屬性需要賦值,并且屬性的名稱為value,則賦值時value可以省略,可以直接定義值
  • 數(shù)組賦值時,值使用{}存儲值。如果數(shù)組中只有一個值,則可以省略{ }

6.注解的提取

注解通過反射獲取。首先可以通過 Class 對象的 isAnnotationPresent() 方法判斷它是否應(yīng)用了某個注解

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {}

然后通過 getAnnotation() 方法來獲取 Annotation 對象,或者是 getAnnotations() 方法。。

public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {}

public Annotation[] getAnnotations() {}

//前一種方法返回指定類型的注解,后一種方法返回注解到這個元素上的所有注解。

如果獲取到的 Annotation 如果不為 null,則就可以調(diào)用它們的屬性方法了。比如

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
 
    public int id() default -1;
 
    public String msg() default "Hi"; 
    
}
//TestAnnotation 中 id 屬性默認(rèn)值為 -1,msg 屬性默認(rèn)值為 Hi
//因為有默認(rèn)值,所以無需要再在 @TestAnnotation 后面的括號里面進(jìn)行賦值了,這一步可以省略
@TestAnnotation()
public class Test {
 
    public static void main(String[] args) {
 
        boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class);
 
        if ( hasAnnotation ) {
            TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class);
 
            System.out.println("id:"+testAnnotation.id());
            System.out.println("msg:"+testAnnotation.msg());
        }
 
    }
 
}

到此這篇關(guān)于Java中的注解、元注解詳細(xì)解析的文章就介紹到這了,更多相關(guān)Java中的注解、元注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • EL調(diào)用Java方法_動力節(jié)點(diǎn)Java學(xué)院整理

    EL調(diào)用Java方法_動力節(jié)點(diǎn)Java學(xué)院整理

    簡單來說,我們在一個類中的某個方法,可以使用EL進(jìn)行調(diào)用,這個能被EL表達(dá)式調(diào)用的方法稱之為EL函數(shù),但是這種方式必須滿足兩點(diǎn)要求,具體哪兩點(diǎn),大家可以參考下本文
    2017-07-07
  • Java中Map實(shí)現(xiàn)線程安全的3種方式

    Java中Map實(shí)現(xiàn)線程安全的3種方式

    本文主要介紹了Java中Map實(shí)現(xiàn)線程安全的3種方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關(guān)于Java大整數(shù)運(yùn)算之BigInteger類

    關(guān)于Java大整數(shù)運(yùn)算之BigInteger類

    這篇文章主要介紹了關(guān)于Java大整數(shù)運(yùn)算之BigInteger類,BigInteger提供高精度整型數(shù)據(jù)類型及相關(guān)操作,所有操作中,都以二進(jìn)制補(bǔ)碼形式表示,需要的朋友可以參考下
    2023-05-05
  • java 將方法作為傳參--多態(tài)的實(shí)例

    java 將方法作為傳參--多態(tài)的實(shí)例

    下面小編就為大家?guī)硪黄猨ava 將方法作為傳參--多態(tài)的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 用Spring將Service注入到Servlet中的流程步驟

    用Spring將Service注入到Servlet中的流程步驟

    在Java Web開發(fā)中,??Servlet??是一個非常重要的組件,它用于處理客戶端的請求并生成響應(yīng),而?Spring??框架則是一個廣泛使用的依賴注入框架,可以幫助開發(fā)者管理應(yīng)用中的對象及其依賴關(guān)系,本文將介紹如何使用Spring框架將Service層的對象注入到Servlet中
    2025-01-01
  • spring事務(wù)的REQUIRES_NEW源碼示例解析

    spring事務(wù)的REQUIRES_NEW源碼示例解析

    這篇文章主要為大家介紹了spring事務(wù)的REQUIRES_NEW源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Mybatis 動態(tài)sql的編寫與開啟二級緩存

    Mybatis 動態(tài)sql的編寫與開啟二級緩存

    二級緩存是Mapper級別的緩存,多個SqlSession去操作同一個Mapper中的SQL語句,則這些SqlSession可以共享二級緩存,即二級緩存是跨SqlSession的,這篇文章主要介紹了Mybatis 動態(tài)sql的編寫|開啟二級緩存,需要的朋友可以參考下
    2023-02-02
  • Spring Boot配置AOP打印日志的全過程

    Spring Boot配置AOP打印日志的全過程

    這篇文章主要給大家介紹了關(guān)于Spring Boot配置AOP打印日志的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Spring Boot如何讀取自定義外部屬性詳解

    Spring Boot如何讀取自定義外部屬性詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot如何讀取自定義外部屬性的相關(guān)資料,這個功能實(shí)現(xiàn)介紹的很詳細(xì),需要的朋友可以參考下
    2021-05-05
  • springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析

    springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析

    這篇文章主要介紹了springcloud微服務(wù)基于redis集群的單點(diǎn)登錄實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09

最新評論