欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中注解的原理解析

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

1.什么是java注解

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

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

2.注解原理

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

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

1.@Override 重寫

2.@Deprecated 過期警告

3.@SuppressWarnings 忽略警告

等等

4.元注解和自定義注解

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

舉個(gè)例子

自定義一個(gè)JobInfo注解

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

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

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

枚舉有

1.SOURCE:源代碼時(shí)保留

2.CLASS:class文件中保留

3.RUNTIME:運(yùn)行時(shí)保留

作用范圍—》 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 中 ,它代表著此注解會(huì)被javadoc工具提取成文檔

元注解:@Target 標(biāo)記這個(gè)注解應(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í)一個(gè)匿名函數(shù)或函數(shù)式接口。
  • @Repeatable - Java 8 開始支持,標(biāo)識(shí)某注解可以在同一個(gè)聲明上使用多次。

5.總結(jié)

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

6.TODO

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

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

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

相關(guān)文章

  • javaweb判斷當(dāng)前請求是否為移動(dòng)設(shè)備訪問的方法

    javaweb判斷當(dāng)前請求是否為移動(dòng)設(shè)備訪問的方法

    這篇文章主要為大家詳細(xì)介紹了javaweb判斷當(dāng)前請求是否為移動(dòng)設(shè)備訪問的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列和棧流程詳解

    Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列和棧流程詳解

    這篇文章主要介紹了Java使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)隊(duì)列和棧流程,連續(xù)結(jié)構(gòu)和跳轉(zhuǎn)結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)中常見的兩種基本數(shù)據(jù)結(jié)構(gòu),而我們本次的主角棧和隊(duì)列都 既可以使用使用跳轉(zhuǎn)結(jié)構(gòu)實(shí)現(xiàn)也可以使用連續(xù)結(jié)構(gòu)實(shí)現(xiàn)
    2023-04-04
  • 關(guān)于HashMap 并發(fā)時(shí)會(huì)引起死循環(huán)的問題解析

    關(guān)于HashMap 并發(fā)時(shí)會(huì)引起死循環(huán)的問題解析

    JDK1.8之前采用頭插,即在鏈表結(jié)構(gòu)上每次都把數(shù)據(jù)放在鏈表頭部。JDK1.8采用尾插方法,很多朋友在學(xué)習(xí)Java并發(fā)容器和框架時(shí),看到為什么要使用ConcurrentHashMap時(shí)不知道究其原因,今天小編通過本文給大家介紹下HashMap 并發(fā)死循環(huán)問題,一起看看吧
    2021-05-05
  • springboot整合Dubbo與Feign的實(shí)現(xiàn)?(無注冊中心)

    springboot整合Dubbo與Feign的實(shí)現(xiàn)?(無注冊中心)

    本文主要介紹了springboot整合Dubbo與Feign的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 升級(jí)springboot中spring框架的版本的實(shí)現(xiàn)方法

    升級(jí)springboot中spring框架的版本的實(shí)現(xiàn)方法

    本文主要介紹了升級(jí)springboot中spring框架的版本的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • JPA?CriteriaBuilder子查詢方式

    JPA?CriteriaBuilder子查詢方式

    這篇文章主要介紹了JPA?CriteriaBuilder子查詢方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 解決myBatis中openSession()自動(dòng)提交的問題

    解決myBatis中openSession()自動(dòng)提交的問題

    在學(xué)習(xí)MySQL過程中,發(fā)現(xiàn)插入操作自動(dòng)提交,問題原因可能是myBatis中的openSession()方法設(shè)置了自動(dòng)提交,或者是MySQL的默認(rèn)引擎設(shè)置為不支持事務(wù)的MyISAM,解決辦法包括更改myBatis的提交設(shè)置或?qū)ySQL表的引擎改為InnoDB
    2024-09-09
  • Java數(shù)組實(shí)現(xiàn)動(dòng)態(tài)初始化的實(shí)例詳解

    Java數(shù)組實(shí)現(xiàn)動(dòng)態(tài)初始化的實(shí)例詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于Java數(shù)組實(shí)現(xiàn)動(dòng)態(tài)初始化的實(shí)例詳解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-10-10
  • java利用Apache commons codec進(jìn)行MD5加密,BASE64加密解密,執(zhí)行系統(tǒng)命令

    java利用Apache commons codec進(jìn)行MD5加密,BASE64加密解密,執(zhí)行系統(tǒng)命令

    這篇文章主要介紹了java利用apache Commons包進(jìn)行MD5加密,BASE64加密解密與執(zhí)行系統(tǒng)命令希望對大家有用
    2017-12-12
  • 詳解java中接口與抽象類的區(qū)別

    詳解java中接口與抽象類的區(qū)別

    這篇文章主要介紹了詳解java中接口與抽象類的區(qū)別的相關(guān)資料,希望通過本文能幫助到大家,讓大家輕松理解掌握接口與抽象類的區(qū)別,需要的朋友可以參考下
    2017-10-10

最新評論