国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java基礎(chǔ)】注解——自定義注解

這篇具有很好參考價(jià)值的文章主要介紹了【Java基礎(chǔ)】注解——自定義注解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

什么是注解?

Java 注解(Annotation)又稱 Java 標(biāo)注,是 JDK5.0 引入的一種注釋機(jī)制。 比如我們常見的@Override和@Deprecated都是注解,注解可以加在類、方法、成員變量等上面,類似于給他們“打標(biāo)簽"。

注解怎么定義?

public @interface 注解名{} 看起來和定義接口很相似只是多了一個(gè)@符號(hào) 接口: public interface 接口名 注解: public @interface 注解名

public @interface lkx {
    
}

注解怎么使用?

現(xiàn)在我們注解已經(jīng)定義好了,使用的時(shí)候直接“@注解名”就可以使用了 比如下面我們可以定義在“類、成員變量、成員方法”上:

@lkx
public class Test {
    @lkx
    private int num;
    
    @lkx
    public static void main(String[] args) {
        System.out.println("hello");
    }
}
  • 思考一下

現(xiàn)在注解定義好也已經(jīng)使用了,但是我不想定義到類上和成員方法上,只想定義在成員方法上,如何才能讓注解只能定義到方法上,定義到別的地方報(bào)錯(cuò)呢? 想要的效果: java 自定義注解,Java基礎(chǔ),java,開發(fā)語言,spring

這個(gè)時(shí)候就要使用元注解來限定范圍了。

元注解

元注解通俗的來說就是定義在注解上的注解,在Java中有四個(gè)元注解 @Target @Retention @Documented @Inherited

@Target

@Target就是用于描述注解的定義范圍,可以限制這個(gè)注解定義的元素類型。

參數(shù) 作用
ElementType.ANNOTATION_TYPE 可以應(yīng)用于注解類型
ElementType.CONSTRUCTOR 可以應(yīng)用于構(gòu)造函數(shù)
ElementType.FIELD 可以應(yīng)用于字段或?qū)傩?/td>
ElementType.LOCAL_VARIABLE 可以應(yīng)用于局部變量
ElementType.METHOD 可以應(yīng)用于方法級(jí)注解
ElementType.PACKAGE 可以應(yīng)用于包聲明
ElementType.PARAMETER 可以應(yīng)用于方法的參數(shù)
ElementType.TYPE 可以應(yīng)用于類的任何元素

因?yàn)槲覀円拗浦幌攵x在成員變量上,所以我們應(yīng)該使用ElementType.FIELD

@Target(ElementType.FIELD)
public @interface lkx {

}

但是如果我們想同時(shí)定義在成員變量和成員方法上應(yīng)該怎么辦呢? 多個(gè)參數(shù)只需要用大括號(hào)包起來,逗號(hào)隔開就可以了

@Target({ElementType.FIELD,ElementType.METHOD})
public @interface lkx {

}

現(xiàn)在就只有定義在類上的注解報(bào)錯(cuò)了 java 自定義注解,Java基礎(chǔ),java,開發(fā)語言,spring

@Retention

@Retention是用于定義注解的生命周期,也可以理解為存儲(chǔ)方式。

參數(shù) 作用
RetentionPolicy.SOURCE 標(biāo)記的注解僅保留在源級(jí)別中,并被編譯器忽略
RetentionPolicy.CLASS 標(biāo)記的注解在編譯時(shí)由編譯器保留,但 Java 虛擬機(jī)(JVM)會(huì)忽略
RetentionPolicy.RUNTIME 標(biāo)記的注解由 JVM 保留,因此運(yùn)行時(shí)環(huán)境可以使用它

下面兩個(gè)元注解使用不多,暫時(shí)不做詳解

@Documented

@Documented是用于描述生成幫助文檔時(shí)是否要保留其注解信息。

@Inherited

@Inherited是用于描述使被它修飾的注解是否具有繼承性。

注解元素

上面我們只是定義了一個(gè)注解,但是不能傳任何信息,只是相當(dāng)于一個(gè)標(biāo)簽,現(xiàn)在我們看看要怎么給注解定義參數(shù):

@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.SOURCE)
public @interface lkx {
    String name() default "張三"; //可以使用default定義默認(rèn)的值
    int age();
}

現(xiàn)在我們看一下如何傳參:

public class Test {

    //name有默認(rèn)值,也可以不寫
    @lkx(name = "李四",age = 18)
    private int num;
    
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

實(shí)戰(zhàn)

現(xiàn)在注解也定義好了,參數(shù)也傳入了,你是否還在想注解有什么卵用。?!,F(xiàn)在我們有個(gè)小需求,把注解傳入的參數(shù)賦值到成員變量上。 例如:

@lkx(name = "李四",age = 18)
private int num; //num沒有被賦值,等于0

賦值完成后
num = 18

注意事項(xiàng):

  1. 下面代碼需要用到反射,如果還不會(huì)的小伙伴可以看我前面幾篇文章。
  2. 因?yàn)橐梅瓷淠玫阶⒔鈪?shù),所以@Retention需要定義為RetentionPolicy.RUNTIME

實(shí)現(xiàn)代碼:

@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface lkx {
    String name() default "張三";
    int age();
}
java復(fù)制代碼public class Test {

    //name有默認(rèn)值,也可以不寫
    @lkx(name = "李四",age = 18)
    private static int num;

    @lkx(name = "王五",age = 38)
    private static int age;

    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        System.out.println("賦值前: num: " + num+"   age: "+age);

        //拿到類的字節(jié)碼
        Class<Test> testClass = Test.class;
        //拿到所有成員變量
        for (Field declaredField : testClass.getDeclaredFields()) {
            //檢測(cè)成員變量上是否有@lkx注解
            if (declaredField.isAnnotationPresent(lkx.class)) {
                lkx annotation = declaredField.getAnnotation(lkx.class);
                //獲取到注解中的age的值
                int age = annotation.age();
                declaredField.set(testClass.newInstance(),age);
            }
        }

        System.out.println("賦值后: num: " + num+"   age: "+age);
    }
}

運(yùn)行結(jié)果:文章來源地址http://www.zghlxwxcb.cn/news/detail-770837.html

java復(fù)制代碼賦值前: num: 0   age: 0
賦值后: num: 18   age: 38

到了這里,關(guān)于【Java基礎(chǔ)】注解——自定義注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java|注解之定義注解

    Java|注解之定義注解

    Java語言使用 @interface 語法來定義注解( Annotation ),它的格式如下: ?注解的參數(shù)類似無參數(shù)方法,可以用 default 設(shè)定一個(gè)默認(rèn)值(強(qiáng)烈推薦)。最常用的參數(shù)應(yīng)當(dāng)命名為 value 。 元注解 有一些注解可以修飾其他注解,這些注解就稱為元注解 (meta annotation)。Java標(biāo)準(zhǔn)庫已經(jīng)

    2024年02月05日
    瀏覽(18)
  • Java中的注解,自定義注解

    Java中的注解,自定義注解

    框架 = 注解 + 反射 + 設(shè)計(jì)模式 注解( Annotation )是從JDK5.0開始引入,以“@注解名”在代碼中存在。 Annotation 可以像修飾符一樣被使用,可用于修飾包、類、構(gòu)造器、方法、成員變量、參數(shù)、局部變量的聲明。還可以添加一些參數(shù)值,這些信息被保存在 Annotation 的 “name=valu

    2023年04月16日
    瀏覽(25)
  • 【Spring】Spring基礎(chǔ)知識(shí) Java開發(fā)必看

    【Spring】Spring基礎(chǔ)知識(shí) Java開發(fā)必看

    ??歡迎來到本文?? ??個(gè)人簡介:陳童學(xué)哦,目前專攻C/C++、Python、Java等方向,一個(gè)正在慢慢前行的普通人。 ??系列專欄:陳童學(xué)的日記 ??其他專欄:C++STL、藍(lán)橋杯,喜歡OJ的小伙伴可以看一手 ??希望各位→點(diǎn)贊?? + 收藏?? + 留言?? ? ??學(xué)習(xí)應(yīng)使你快樂!望與諸君

    2024年02月13日
    瀏覽(22)
  • 【Java基礎(chǔ)教程】(二十六)Java新特性篇 · 第六講:注解——解碼程序設(shè)計(jì)中的元數(shù)據(jù)利器,用小小的@符里做大大的開發(fā)~

    【Java基礎(chǔ)教程】(二十六)Java新特性篇 · 第六講:注解——解碼程序設(shè)計(jì)中的元數(shù)據(jù)利器,用小小的@符里做大大的開發(fā)~

    Java 注解(Annotation) 是Java語言中一種元數(shù)據(jù)形式,它提供了一種在代碼中添加元數(shù)據(jù)的方式。注解為程序員提供了向代碼中添加額外信息的能力,這些額外信息可以被編譯器、工具或者運(yùn)行時(shí)環(huán)境使用。 優(yōu)點(diǎn): 提供了一種 更加簡潔和可讀性強(qiáng) 的代碼編寫風(fēng)格; 增強(qiáng)代碼的

    2024年02月16日
    瀏覽(22)
  • java 元注解||自定義注解的使用

    1. @Retention注解 指定了標(biāo)記的注解如何存儲(chǔ): RetentionPolicy.SOURCE,標(biāo)記的注解僅保留在源代碼級(jí)別,并被編譯器忽略。 RetentionPolicy.CLASS,標(biāo)記的注解在編譯時(shí)由編譯器保留,但被Java虛擬機(jī)(JVM)忽略。 RetentionPolicy.RUNTIME,標(biāo)記的注解由JVM保留,以便運(yùn)行時(shí)環(huán)境可以使用。 2. @Do

    2024年02月16日
    瀏覽(24)
  • Java企業(yè)級(jí)開發(fā)學(xué)習(xí)筆記(4.4)Spring Boot加載自定義配置文件

    Java企業(yè)級(jí)開發(fā)學(xué)習(xí)筆記(4.4)Spring Boot加載自定義配置文件

    創(chuàng)建 Spring Boot 項(xiàng)目 單擊【創(chuàng)建】按鈕 在 resources 里創(chuàng)建 myconfig.properties 文件 設(shè)置文件編碼 設(shè)置學(xué)生的四個(gè)屬性值 在 cn.kox.boot 包里創(chuàng)建config子包,在子包里創(chuàng)建 StudentConfig 打開自帶的測(cè)試類 ConfigDemo01ApplicationTests 注入學(xué)生配置實(shí)體,創(chuàng)建 testStudentConfig() 測(cè)試方法,在里面輸

    2024年02月08日
    瀏覽(27)
  • Java實(shí)現(xiàn)自定義注解

    Java實(shí)現(xiàn)自定義注解

    (1)Java實(shí)現(xiàn)自定義注解其實(shí)很簡單,跟類定義差不多,只是屬性的定義可能跟我們平時(shí)定義的屬性略有不同,這里會(huì)給大家詳解,先來看代碼: 上面代碼就實(shí)現(xiàn)了一個(gè) 自定義注解 , 實(shí)現(xiàn)自定義注解需要最少指定 兩個(gè) 基本條件 : ①注解的作用范圍②注解的生命周期 ,那

    2023年04月19日
    瀏覽(24)
  • Java中自定義注解

    當(dāng)使用Java編寫應(yīng)用程序時(shí),我們常常使用注解來為程序添加附加信息,并且可以在運(yùn)行時(shí)讀取這些注解。除了Java提供的預(yù)定義注解外,我們還可以自定義注解來滿足自己的需求。在本文中,我們將介紹Java中自定義注解的基礎(chǔ)知識(shí)。 一、什么是注解? 注解是一種元數(shù)據(jù),可

    2024年02月14日
    瀏覽(24)
  • Java自定義注解

    Java自定義注解

    目錄 一、什么是自定義注解 1)Java注解簡介 2)Java注解分類 JDK基本注解 JDK元注解 自定義注解 如何自定義注解? 二、自定義注解 1)獲取類上注解值 2)獲取類屬性上的注解屬性值 3)獲取方法上的注解值? 4)獲取參數(shù)修飾注解對(duì)應(yīng)的屬性值 三、aop應(yīng)用自定義注解 自定義注

    2024年02月19日
    瀏覽(20)
  • Java的自定義注解

    Java的自定義注解

    ????????自定義注解包括注解聲明、元注解、運(yùn)行時(shí)處理器三個(gè)部分。注解聲明指定了注解的名稱、作用域、成員等信息;元注解則用來對(duì)注解進(jìn)行修飾;運(yùn)行時(shí)處理器則負(fù)責(zé)在程序運(yùn)行過程中處理注解,并根據(jù)注解提供的信息執(zhí)行相應(yīng)的邏輯。自定義注解在編寫框架、插

    2024年02月03日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包