最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中注解的原理解析

 更新時間:2023年10月02日 09:31:14   作者:andone1024  
這篇文章主要介紹了java中注解的原理解析,java 注解又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機制,可以理解為為某個東西,打個標(biāo)記的記號,等要使用這個注解時,可以通過反射獲取標(biāo)注里面的內(nèi)容,需要的朋友可以參考下

1.什么是java注解

java 注解(Annotation)又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機制,可以理解為為某個東西(類,方法,字段。)

打個標(biāo)記的記號,等要使用這個注解時,可以通過反射獲取標(biāo)注里面的內(nèi)容。

2.注解原理

在編譯器生成類文件時,標(biāo)注可以被嵌入到字節(jié)碼中。Java 虛擬機可以保留標(biāo)注內(nèi)容,在運行時可以獲取到標(biāo)注內(nèi)容。

3.java內(nèi)置注解

1.@Override 重寫

2.@Deprecated 過期警告

3.@SuppressWarnings 忽略警告

等等

4.元注解和自定義注解

像程序員如何使用注解呢,肯定是自定義一個注解,那這個自定義注解編譯器怎么認識呢,所以java提供一些元注解來解釋下自定義注解是什么。

舉個例子

自定義一個JobInfo注解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Inherited 
public @interface JobInfo {
    String jobName() default "";
}

元注解: @Retention 表示這個注解的作用域 ,告知編譯器這個JobInfo注解,在代碼什么級別保存該注解信息。

在實際開發(fā)中,我們一般都寫RUNTIME,當(dāng)然根據(jù)自己需求而定;

枚舉有

1.SOURCE:源代碼時保留

2.CLASS:class文件中保留

3.RUNTIME:運行時保留

作用范圍—》 RUNTIME>CLASS>SOURCE

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,
    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,
    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

元注解:@Documented 作用文檔 將此注解包含在 javadoc 中 ,它代表著此注解會被javadoc工具提取成文檔

元注解:@Target 標(biāo)記這個注解應(yīng)該是使用在哪種 Java 成員上面

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,
    /** Field declaration (includes enum constants) */
    FIELD,
    /** Method declaration */
    METHOD,
    /** Formal parameter declaration */
    PARAMETER,
    /** Constructor declaration */
    CONSTRUCTOR,
    /** Local variable declaration */
    LOCAL_VARIABLE,
    /** Annotation type declaration */
    ANNOTATION_TYPE,
    /** Package declaration */
    PACKAGE,
    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,
    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}
  • @Target(ElementType.TYPE)——接口、類、枚舉、注解
  • @Target(ElementType.FIELD)——字段、枚舉的常量
  • @Target(ElementType.METHOD)——方法
  • @Target(ElementType.PARAMETER)——方法參數(shù)
  • @Target(ElementType.CONSTRUCTOR) ——構(gòu)造函數(shù)
  • @Target(ElementType.LOCAL_VARIABLE)——局部變量
  • @Target(ElementType.ANNOTATION_TYPE)——注解
  • @Target(ElementType.PACKAGE)——包

元注解@Inherited 表示繼承,比如類A上打了@JobInfo注解,那么類B繼承了類A,那么類B也可以拿到類A上的@JobInfo注解信息

其他元注解

  • @SafeVarargs - Java 7 開始支持,忽略任何使用參數(shù)為泛型變量的方法或構(gòu)造函數(shù)調(diào)用產(chǎn)生的警告。
  • @FunctionalInterface - Java 8 開始支持,標(biāo)識一個匿名函數(shù)或函數(shù)式接口。
  • @Repeatable - Java 8 開始支持,標(biāo)識某注解可以在同一個聲明上使用多次。

5.總結(jié)

程序員要使用自定義注解,必須使用元注解標(biāo)識一些信息,告知編譯器這個自定義注解的一些信息,這樣編譯器才知道怎么去校驗和保留該自定義注解信息到字節(jié)碼中

6.TODO

1.注解的使用(打標(biāo)記)

2.注解的獲?。ǐ@取注解標(biāo)記的信息,拿到這些信息做其他事情。)通常我們說一個注解的作用時,說的是獲取這個注解打標(biāo)記的內(nèi)容然后干了什么事情,這個作用。

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

相關(guān)文章

  • SpringBoot集成內(nèi)存數(shù)據(jù)庫H2的實踐

    SpringBoot集成內(nèi)存數(shù)據(jù)庫H2的實踐

    h2是內(nèi)存數(shù)據(jù)庫,查詢高效,可以在開發(fā)初期使用它。本文主要介紹了SpringBoot集成內(nèi)存數(shù)據(jù)庫H2的實踐,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • 關(guān)于MyBatis Plus中使用or和and問題

    關(guān)于MyBatis Plus中使用or和and問題

    這篇文章主要介紹了關(guān)于MyBatis Plus中使用or和and問題,需要的朋友可以參考下
    2020-12-12
  • springboot security之前后端分離配置方式

    springboot security之前后端分離配置方式

    這篇文章主要介紹了springboot security之前后端分離配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • idea創(chuàng)建Springboot多模塊項目(聚合項目)

    idea創(chuàng)建Springboot多模塊項目(聚合項目)

    文章詳細介紹了如何在idea創(chuàng)建Springboot多模塊項目(聚合項目),包括創(chuàng)建父工程和子工程、編輯pom.xml文件、編寫代碼和測試,還介紹了如何處理Maven視圖中的層級關(guān)系,并展示了如何同時啟動多個子項目
    2024-11-11
  • Java多線程并發(fā)的指令重排序問題及volatile寫屏障原理詳解

    Java多線程并發(fā)的指令重排序問題及volatile寫屏障原理詳解

    這篇文章主要介紹了Java多線程并發(fā)的指令重排序問題及volatile寫屏障原理詳解,指令重排序是編譯器或處理器為了提高性能而對指令執(zhí)行順序進行重新排列的優(yōu)化技術(shù),需要的朋友可以參考下
    2024-01-01
  • java?spring?mvc處理器映射器介紹

    java?spring?mvc處理器映射器介紹

    這篇文章主要介紹了java?spring?mvc處理器映射器,文章圍繞equestMapping解析映射介紹展開源碼內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • java連接數(shù)據(jù)庫知識點總結(jié)以及操作應(yīng)用

    java連接數(shù)據(jù)庫知識點總結(jié)以及操作應(yīng)用

    這篇文章主要給大家介紹了關(guān)于java連接數(shù)據(jù)庫知識點總結(jié)以及操作應(yīng)用的相關(guān)資料, 當(dāng)涉及到Java中數(shù)據(jù)庫數(shù)據(jù)處理時,我們可以利用強大的Java數(shù)據(jù)庫連接技術(shù)與各種數(shù)據(jù)庫進行交互,需要的朋友可以參考下
    2023-12-12
  • 詳解Java序列化機制

    詳解Java序列化機制

    這篇文章主要介紹了Java序列化機制的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • 定時任務(wù)@Scheduled用法及其參數(shù)使用

    定時任務(wù)@Scheduled用法及其參數(shù)使用

    這篇文章主要介紹了定時任務(wù)@Scheduled用法及其參數(shù)使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringBoot詳細講解通過自定義classloader加密保護class文件

    SpringBoot詳細講解通過自定義classloader加密保護class文件

    這篇文章主要介紹了SpringBoot通過自定義classloader加密class文件,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04

最新評論

潞城市| 长海县| 太白县| 眉山市| 龙泉市| 武汉市| 晋江市| 铁力市| 两当县| 舟曲县| 仲巴县| 祁阳县| 邢台县| 荆州市| 清涧县| 怀宁县| 额济纳旗| 兴义市| 永顺县| 渭源县| 元朗区| 和平区| 昔阳县| 台东县| 杭州市| 女性| 长治县| 巍山| 江安县| 綦江县| 北安市| 眉山市| 福鼎市| 青铜峡市| 北票市| 米脂县| 句容市| 张家口市| 金湖县| 阳西县| 南皮县|