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

詳解java注解相關(guān)知識

 更新時間:2021年06月25日 11:50:02   作者:紅旗下的小兵  
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著java注解的使用展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下

定義

 1、如果注解中有屬性,那么必須給屬性賦值。

package com.lxc.Test;
 
// 定義一個注解
public @interface Annotation {
    String name(); // 看似name像一個方法,實際上我們把name稱為屬性
}

使用上邊注解:

package com.lxc.Test;
 
public class Test {
    @Annotation(name="lxc")
    public void test() {
    }
}

2、如果注解中有屬性,且沒有定義默認值,那么在使用注解的時候,必須給屬性賦值。

public @interface Annotation {
    String name();
    int age();
}
public class Test {
    @Annotation(name="lxc", age=20)
    public void test() {
    }
}

但是注解中如果有默認值,在使用注解時,可以不給屬性賦值

public class Test {
    @Annotation(name="lxc")
    public void test() {
    }
}
public @interface Annotation {
    String name();
    String password() default "123";
}

3、value() 屬性

如果注解中的一個屬性名是value,且有且只有一個value(),在使用注解的時候,屬性名可以省略

public class Test {
    @Annotation("lxc")
    public void test() {
    }
}
public @interface Annotation {
    String value();
    String password() default "123";
}

注解中屬性的類型有哪些

byte、short、int、float、double、boolean、char、String、Class、枚舉

數(shù)組:

如果數(shù)組屬性中有一個元素,那么數(shù)組的大括號可以省略:

public @interface Annotation {
    String[] name();
}
public class Test {
    // @Annotation(name={"lxc"}) // 寫法一
    @Annotation(name="lxc") // 寫法二
    public void test() {
    }
}

枚舉:

public enum MyEnum {
    className, name, age,
}
public @interface Annotation {
    String[] name();
    MyEnum[] student();
}
public class Test {
    @Annotation(name="lxc", student = {MyEnum.className, MyEnum.age})
    public void test() {
    }
}

注解如何使用:

(1)標記一個注解只能出現(xiàn)在類或者方法上

@Target(value = {ElementType.TYPE, ElementType.METHOD})
public @interface Annotation {
    String userName();
    MyEnum[] student();
}

(2)標記一個注解可以被反射機制所讀取

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
// 標記注解只能出現(xiàn)在類上
@Target(value = {ElementType.TYPE, ElementType.METHOD})
// 標記注解可以被反射機制所讀取
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation {
    String userName();
    MyEnum[] student();
}

獲取注解中的屬性值

通過反射機制來獲取。

(1)獲取類上邊注解的屬性:

注解類:

package com.lxc.Test;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
// 標記注解只能出現(xiàn)在類上
@Target(value = {ElementType.TYPE, ElementType.METHOD})
// 標記注解可以被反射機制所讀取
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation {
    String userName() default "呂星辰";
}

使用注解類:

// myAnnotation 
@Annotation(userName = "哈哈")
public class myAnnotation {
}

獲取注解類中 的屬性:

package com.lxc.Test;
/**
 * c.isAnnotationPresent(注解類.class) : 判斷一個類上是否有注解,返回true、false
 * c.getAnnotation(注解類.class) : 獲取注解類的實例
 *
 */
public class Test {
    public static void main(String[] args) throws Exception{
        Class c = Class.forName("com.lxc.Test.myAnnotation");
        System.out.println(c.isAnnotationPresent(Annotation.class));
        // 判斷一個類是否有:Annotation這個注解
        if(c.isAnnotationPresent(Annotation.class)) {
            // 獲取注解對象
            Annotation ann = (Annotation) c.getAnnotation(Annotation.class);
            // 通過注解對象獲取屬性值
            System.out.println(ann.userName());
        }
    }
}

(2)獲取類中方法上邊注解的屬性:

注解類:

package com.lxc.Test;
 
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
 
// 標記注解只能出現(xiàn)在類上
@Target(value = {ElementType.TYPE, ElementType.METHOD})
// 標記注解可以被反射機制所讀取
@Retention(RetentionPolicy.RUNTIME)
public @interface Annotation {
    String userName();
    String password();
}

在方法上使用注解及獲取方法上邊的注解:
分析:想獲取方法上的注解,首先需要獲取該方法,獲取該方法的前提,獲取該方法的類:

package com.lxc.Test;
 
import java.lang.reflect.Method;
 
public class UserAnnotation {
    @Annotation(userName = "lxc", password = "123")
    public void getUser() {}
 
    public static void main(String[] args) throws Exception{
        // 通過反射獲取類
        Class c = Class.forName("com.lxc.Test.UserAnnotation");
        // 通過反射獲取類中的方法
        Method getUserMethod = c.getDeclaredMethod("getUser");
        // 判斷方法是否有 Annotation 這個注解
        if(getUserMethod.isAnnotationPresent(Annotation.class)) {
            Annotation ann = getUserMethod.getAnnotation(Annotation.class);
            System.out.println(ann.userName()); // lxc
            System.out.println(ann.password()); // 123
        }
    }
}

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

相關(guān)文章

  • SpringBoot結(jié)合Redis哨兵模式的實現(xiàn)示例

    SpringBoot結(jié)合Redis哨兵模式的實現(xiàn)示例

    這篇文章主要介紹了SpringBoot結(jié)合Redis哨兵模式的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 解決springcloud中Feign導入依賴為unknow的情況

    解決springcloud中Feign導入依賴為unknow的情況

    這篇文章主要介紹了解決springcloud中Feign導入依賴為unknow的情況,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中的裝箱和拆箱深入理解

    Java中的裝箱和拆箱深入理解

    裝箱和拆箱是java中老生常談的問題,下面小編通過本文給大家介紹java裝箱和拆箱最基本的東西,感興趣的朋友一起看下吧
    2016-07-07
  • Java中ArrayBlockingQueue和LinkedBlockingQueue

    Java中ArrayBlockingQueue和LinkedBlockingQueue

    這篇文章主要介紹了Java中ArrayBlockingQueue和LinkedBlockingQueue,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-09-09
  • Java 時間格式轉(zhuǎn)換之impleDateFormat與Data API解析與使用

    Java 時間格式轉(zhuǎn)換之impleDateFormat與Data API解析與使用

    想必大家對 SimpleDateFormat 并不陌生。SimpleDateFormat 是 Java 中一個非常常用的類,他是以區(qū)域敏感的方式格式化和解析日期的具體類。 它允許格式化 (date -> text)、語法分析 (text -> date)和標準化
    2021-11-11
  • Spring Boot中使用Spring-Retry重試框架的實現(xiàn)

    Spring Boot中使用Spring-Retry重試框架的實現(xiàn)

    本文主要介紹了Spring Boot中使用Spring-Retry重試框架的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-04-04
  • 利用Java實現(xiàn)解析網(wǎng)頁中的內(nèi)容

    利用Java實現(xiàn)解析網(wǎng)頁中的內(nèi)容

    這篇文章主要為大家詳細介紹了如何利用Java語言做一個解析指定網(wǎng)址的網(wǎng)頁內(nèi)容小應(yīng)用,文中的實現(xiàn)步驟講解詳細,感興趣的可以嘗試下
    2022-10-10
  • spring-boot使用AOP統(tǒng)一處理日志

    spring-boot使用AOP統(tǒng)一處理日志

    這篇文章主要為大家詳細介紹了spring-boot使用AOP統(tǒng)一處理日志,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Java實現(xiàn)浪漫流星表白的示例代碼

    Java實現(xiàn)浪漫流星表白的示例代碼

    本文將利用Java語言實現(xiàn)浪漫流星表白,可以實現(xiàn)這些功能:播放音樂、自定義流星數(shù)量、飛行速度、光暈大小、流星大小,自定義表白話語,感興趣的可以學習一下
    2022-05-05
  • sa-token?路由攔截式鑒權(quán)使用示例詳解

    sa-token?路由攔截式鑒權(quán)使用示例詳解

    這篇文章主要為大家介紹了sa-token?路由攔截式鑒權(quán)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07

最新評論

商水县| 普定县| 云龙县| 建德市| 天峻县| 秦安县| 即墨市| 建平县| 云浮市| 彝良县| 宕昌县| 沐川县| 汉源县| 龙井市| 寻乌县| 交口县| 镇原县| 金昌市| 成武县| 湘潭县| 潍坊市| 沙田区| 区。| 霍山县| 中西区| 内乡县| 东平县| 海伦市| 河源市| 南平市| 通州区| 瑞昌市| 平谷区| 南丰县| 满洲里市| 武定县| 新民市| 黔西县| 丰台区| 南平市| 衡阳县|