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

淺談Java自定義注解相關(guān)知識(shí)

 更新時(shí)間:2021年05月25日 14:44:48   作者:韓曙亮  
今天帶大家來學(xué)習(xí)Java注解的相關(guān)知識(shí),文中對(duì)自定義注解作了非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)Java的小伙伴們很有幫助,需要的朋友可以參考下

一、自定義注解格式

分析 Java 中自帶的 @Override 注解 , 源碼如下 :

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

注解分為兩部分 :

① 元注解 ;

② public @interface 注解名稱 ;

二、注解本質(zhì)分析

按照 public @interface 注解名稱 格式 , 寫出一個(gè)注解 , 編譯該注解代碼生成 Annotation.class 字節(jié)碼文件 ;

public @interface Annotation {
}

使用 javap 命令反編譯Annotation.class 字節(jié)碼文件 , 查看該注解的實(shí)際代碼 ;

反編譯命令如下 :

javap Annotation.class

輸出內(nèi)容 :

D:\002_Project\004_Java_Learn\Annotation\out\production\Annotation>javap Annotation.class
Compiled from "Annotation.java"
public interface Annotation extends java.lang.annotation.Annotation {
}

在這里插入圖片描述

注解的本質(zhì)是一個(gè) interface 接口 , 注解接口默認(rèn)繼承了 java.lang.annotation.Annotation 接口 ;

public interface Annotation extends java.lang.annotation.Annotation {
}

三、注解屬性及類型

注解的本質(zhì)是接口 , 接口中可以定義 常量 和 方法 ;

在注解中定義 接口方法 , 就是 注解的屬性 ;

為注解添加屬性 : 接口中的方法都是抽象方法 , 其中 public abstract 可以省略 ;

public @interface Annotation {
    public abstract String path();
}

注解屬性使用格式 :

@注解名稱(屬性名稱 = 屬性值)

注解屬性使用 : 在相關(guān)的代碼上使用

 @Annotation(path = "")
    Student(String name, int age){
    }

四、注解屬性類型

注解屬性 ( 接口方法 ) 返回值類型要求 :

① 基本數(shù)據(jù)類型 : byte , short , int , long , float , double , char , boolean ;

② 字符串類型 : String ;

③ 枚舉類型 : enum ;

④ 注解類型 ;

⑤ 以上類型的數(shù)組形式 ;

注解屬性返回值必須是以上的類型 , 不能設(shè)置其它類型返回值 , 否則會(huì)報(bào)錯(cuò) ;

注解中定義了屬性 , 在使用注解時(shí) , 需要 給 注解屬性 賦值 ;

定義 注解屬性 時(shí) , 可以 使用 default 關(guān)鍵字 指定屬性默認(rèn)值 , 下面代碼中 , 制定 注解屬性 intValue 值類型為 int 整型 , 默認(rèn)值 88 ;

int intValue() default 88;

如果 注解屬性 指定了默認(rèn)值 , 在使用注解時(shí) , 可以選擇 不為該屬性賦值 ( 此時(shí)使用默認(rèn)屬性值 ) , 也可以進(jìn)行賦值 ( 指定一個(gè)新的屬性值 ) ;

如果 注解屬性 沒有指定默認(rèn)值 , 則使用 注解 時(shí) , 必須為其指定一個(gè)默認(rèn)值 , 否則編譯時(shí)報(bào)錯(cuò) ;

數(shù)組類型 的 注解屬性 賦值 時(shí) , 使用大括號(hào)進(jìn)行賦值 , 大括號(hào)內(nèi)是數(shù)組元素 , 如果只有一個(gè)屬性 , 可以省略大括號(hào) ,

注解 聲明示例 :

public @interface Annotation {
    /**
     * 字符串類型
     * @return
     */
    String stringValue();

    /**
     * int 基本類型
     * @return
     */
    int intValue() default 88;

    /**
     * 枚舉類型
     * @return
     */
    Number enumValue();

    /**
     * 注解類型
     * @return
     */
    Annotation2 annotationValue();

    /**
     * 字符串?dāng)?shù)組類型
     * @return
     */
    String[] stringArrayValue();
}

枚舉類 :

public enum Number {
    ONE, TWO, THREE
}

Annotation2 注解類 :

public @interface Annotation2 {
}

注解使用示例 :

/**
 * 注解生成文檔
 *
 * @author hsl
 * @version  0.1
 * @since 1.5
 */
public class Student {
    /**
     * 構(gòu)造函數(shù)
     * @param name 參數(shù)一
     * @param age 參數(shù)二
     */
    @Annotation(
            stringValue = "tom",
            enumValue = Number.ONE,
            annotationValue = @Annotation2,
            stringArrayValue = {"tom", "jerry"})
    Student(String name, int age){
    }

    @SuppressWarnings("all")
    @Override
    public String toString() {
        return super.toString();
    }
}

代碼分析 : 重點(diǎn)關(guān)注注解的使用 , 使用注解時(shí) , 需要給 沒有默認(rèn)值 的 注解屬性 賦值 , 格式為 注解屬性名稱 = 對(duì)應(yīng)類型屬性值 , 如果 注解屬性 有默認(rèn)值 , 則

@Annotation(stringValue = "tom", enumValue = Number.ONE, stringArrayValue = {"tom", "jerry"})

五、注解屬性賦值簡(jiǎn)化操作

如果 注解屬性 名稱是 value , 并且 注解中只有 1 1 1 個(gè)屬性 , 那么在使用 注解 為 注解屬性 賦值時(shí) , 可以省略注解名稱 , 直接傳入 注解屬性值 ;

示例 : JDK 自帶的 SuppressWarnings 注解 ,

@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
    String[] value();
}

注解使用 : 使用 SuppressWarnings 注解時(shí) , 直接傳入 “all” 參數(shù) , 省略了注解屬性名稱 ;

 @SuppressWarnings("all")
    @Override
    public String toString() {
        return super.toString();
    }

滿足兩個(gè)條件 , 才能使用上述簡(jiǎn)化方式 ;

到此這篇關(guān)于淺談Java自定義注解相關(guān)知識(shí)的文章就介紹到這了,更多相關(guān)Java自定義注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文教你利用Stream?API批量Mock數(shù)據(jù)的方法

    一文教你利用Stream?API批量Mock數(shù)據(jù)的方法

    在日常開發(fā)的過程中我們經(jīng)常會(huì)遇到需要mock一些數(shù)據(jù)的場(chǎng)景,比如說?mock?一些接口的返回或者說?mock?一些測(cè)試消息用于隊(duì)列生產(chǎn)者發(fā)送消息。本文將教你如何通過?Stream?API?批量?Mock?數(shù)據(jù),需要的可以參考一下
    2022-09-09
  • Java定時(shí)任務(wù)原理詳解

    Java定時(shí)任務(wù)原理詳解

    當(dāng)下,java編碼過程中,實(shí)現(xiàn)定時(shí)任務(wù)的方式主要以以下兩種為主:spring框架的@Scheduled和quzrtz框架。本文主要就二者的框架原理實(shí)現(xiàn)做一個(gè)入門引導(dǎo),為了解深層實(shí)現(xiàn)細(xì)節(jié)做一定的鋪墊
    2022-07-07
  • SpringBoot+mybatis實(shí)現(xiàn)多數(shù)據(jù)源支持操作

    SpringBoot+mybatis實(shí)現(xiàn)多數(shù)據(jù)源支持操作

    這篇文章主要介紹了SpringBoot+mybatis實(shí)現(xiàn)多數(shù)據(jù)源支持操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java如何利用NIO壓縮文件或文件夾

    java如何利用NIO壓縮文件或文件夾

    這篇文章主要介紹了java如何利用NIO壓縮文件或文件夾問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹

    Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹

    這篇文章主要介紹了Java中網(wǎng)絡(luò)IO的實(shí)現(xiàn)方式(BIO、NIO、AIO)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的步驟詳解

    Java實(shí)現(xiàn)Excel導(dǎo)入導(dǎo)出的步驟詳解

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Excel的導(dǎo)入、導(dǎo)出,文中示例代碼介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴們可以參考一下
    2023-06-06
  • 解決RedisTemplate存儲(chǔ)至緩存數(shù)據(jù)出現(xiàn)亂碼的情況

    解決RedisTemplate存儲(chǔ)至緩存數(shù)據(jù)出現(xiàn)亂碼的情況

    這篇文章主要介紹了解決RedisTemplate存儲(chǔ)至緩存數(shù)據(jù)出現(xiàn)亂碼的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 解決@Test注解在Maven工程的Test.class類中無法使用的問題

    解決@Test注解在Maven工程的Test.class類中無法使用的問題

    這篇文章主要介紹了解決@Test注解在Maven工程的Test.class類中無法使用的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • spring security登錄成功后通過Principal獲取名返回空問題

    spring security登錄成功后通過Principal獲取名返回空問題

    這篇文章主要介紹了spring security登錄成功后通過Principal獲取名返回空問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • java中return語句的幾種用法舉例

    java中return語句的幾種用法舉例

    這篇文章主要介紹了Java中return語句的使用,包括有返回值類型的方法、提前返回、返回對(duì)象以及方法返回類型為void的情況,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01

最新評(píng)論

高阳县| 阆中市| 司法| 宜昌市| 密云县| 咸阳市| 商丘市| 定结县| 南投县| 鲜城| 杭锦旗| 金湖县| 东安县| 定南县| 南木林县| 吉隆县| 拉孜县| 乃东县| 孟津县| 胶南市| 宣恩县| 常宁市| 新干县| 鹤峰县| 济宁市| 新竹市| 湖南省| 景东| 双牌县| 九江县| 伽师县| 缙云县| 龙游县| 湖南省| 荃湾区| 宝应县| 贺州市| 肇东市| 香格里拉县| 旬阳县| 霍林郭勒市|