国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

如何更好地使用java注解

王林
發(fā)布: 2020-06-05 17:21:23
轉(zhuǎn)載
1947人瀏覽過(guò)

如何更好地使用java注解

什么是注解?

注解(Annotation),也叫元數(shù)據(jù)。一種代碼級(jí)別的說(shuō)明。它是JDK1.5及以后版本引入的一個(gè)特性,與類(lèi)、接口、枚舉是在同一個(gè)層次。它可以聲明在包、類(lèi)、字段、方法、局部變量、方法參數(shù)等的前面,用來(lái)對(duì)這些元素進(jìn)行說(shuō)明,注釋。

我們可以把注解理解為代碼里的特殊標(biāo)記,這些標(biāo)記可以在編譯,類(lèi)加載,運(yùn)行時(shí)被讀取,并執(zhí)行相應(yīng)的處理。通過(guò)注解,開(kāi)發(fā)人員可以在不改變?cè)写a和邏輯的情況下,在源代碼中嵌入補(bǔ)充信息。

1、注解的作用

編寫(xiě)文檔:通過(guò)代碼里標(biāo)識(shí)的注解生成文檔【生成文檔doc文檔】

立即學(xué)習(xí)Java免費(fèi)學(xué)習(xí)筆記(深入)”;

代碼分析:通過(guò)代碼里標(biāo)識(shí)的注解對(duì)代碼進(jìn)行分析【使用反射】

編譯檢查:通過(guò)代碼里標(biāo)識(shí)的注解讓編譯器能夠?qū)崿F(xiàn)基本的編譯檢查【@Override】

2、JDK中預(yù)定義的注解

@Override

檢測(cè)被該注解標(biāo)注的方法是否是繼承自父類(lèi)(接口)的。

@Deprecated

該注解標(biāo)識(shí)的內(nèi)容,表示已過(guò)時(shí),使用的時(shí)候,會(huì)有一個(gè)橫線(xiàn)。

SuppressWarnings

壓制警告,一般傳遞參數(shù)all @SuppressWarnings(“all”)。

(視頻教程推薦:java視頻

3、自定義注解

格式

public @interface 注解名稱(chēng) {
	屬性列表;
}
登錄后復(fù)制

本質(zhì):注解本質(zhì)上就是一個(gè)接口,該接口默認(rèn)繼承Annotation接口,可以通過(guò)javap 類(lèi)名.class命令反編譯class文件

public interface MyAnno extends java.lang.annotation.Annotation { }
登錄后復(fù)制

屬性:

注解中的屬性,就是接口中的抽象方法。

要求:

屬性的返回值類(lèi)型只能是以下類(lèi)型

基本數(shù)據(jù)類(lèi)型

String

枚舉

注解

以上類(lèi)型的數(shù)組

public @interface MyAnno {
    int age();
    String name();
    //枚舉類(lèi)型
    Person per();
    //注解類(lèi)型
    MyAnno2 anno2();
    //數(shù)組類(lèi)型
    String[] strs();
}

//枚舉類(lèi)Person
public enum Person {
    P1,P2;
}
登錄后復(fù)制

注意:

定義了屬性,在使用時(shí)必須給屬性賦值,多個(gè)屬性之間用逗號(hào)隔開(kāi),所以,一般注解中方法名一般取成屬性名;

如果定義屬性時(shí),使用default關(guān)鍵字給屬性默認(rèn)初始化值,則使用時(shí),可以不用給屬性賦值;

如果只有一個(gè)屬性需要賦值,并且屬性的名稱(chēng)是value,則value可以省略,直接定義屬性值;

數(shù)組賦值時(shí),值使用{}包裹。如果數(shù)組中只有一個(gè)值,則{}可以省略。

@MyAnno(age=20, name="zhangsan", per=Person.P1, anno2=@MyAnno2, strs={"zhangsan","lisi"})
public class Test {
}
登錄后復(fù)制

元注解:用于描述注解的注解

@Target

當(dāng)前被描述的注解能夠作用的位置,該注解只有一個(gè)屬性是value,返回值是ElementType枚舉類(lèi)型的數(shù)組。

ElementType 的常用值:

TYPE:可以作用于類(lèi)上

METHOD:可以作用于方法上

FIELD:可以作用于成員變量上

@Rentention

描述注解被保留的階段,該注解只有一個(gè)屬性value,返回值是RetentionPolicy枚舉類(lèi)型

RetentionPolicy 的值

SOURCE:當(dāng)前被描述的注解,不會(huì)保留到class文件中

CLASS:當(dāng)前被描述的注解,會(huì)保留到class字節(jié)碼文件中,但是不會(huì)被JVM讀取到

RUNTIME:當(dāng)前被描述的注解,會(huì)保留到class字節(jié)碼文件中,并被JVM讀取到,自定義的值,一般都取這個(gè)值

@Documented

當(dāng)前被描述的注解是否被抽取到api文檔中

@Inherited

當(dāng)前被描述的描述注解是否被子類(lèi)繼承

一般經(jīng)常用到的是前兩個(gè)元注解。

4、注解的使用

在程序中使用注解:獲取這幾中定義的屬性值

// pro 注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface pro {
    String className();
    String methodName();
}

//在程序中使用注解
@pro(className="anli.Demo1", methodName = "show1")
public class UseAnno {
    public static void main(String[] args) throws Exception {
        //獲取這個(gè)類(lèi)的class對(duì)象
        Class<UseAnno> useAnnoClass = UseAnno.class;
        //獲取指定的注解類(lèi)子類(lèi)對(duì)象
        pro proAnno = useAnnoClass.getAnnotation(pro.class);
        //執(zhí)行注解中的方法,獲取注解中屬性的值
        String className = proAnno.className();
        String methodName = proAnno.methodName();
    }
登錄后復(fù)制

通過(guò)Class類(lèi)中的getAnnotation()方法,獲得的是注解類(lèi)的實(shí)現(xiàn)類(lèi)的對(duì)象,有了對(duì)象,就可以執(zhí)行注解中的方法,返回值就是使用注解時(shí)設(shè)置的屬性值。其實(shí)就是在內(nèi)存中生成了一個(gè)該注解接口的子類(lèi)實(shí)現(xiàn)對(duì)象

	 public class ProImpl implements Pro{
          public String className(){
               return "cn.itcast.annotation.Demo1";
           }
           public String methodName(){
               return "show";
           }
       }
登錄后復(fù)制

推薦教程:java開(kāi)發(fā)入門(mén)

以上就是如何更好地使用java注解的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

java速學(xué)教程(入門(mén)到精通)
java速學(xué)教程(入門(mén)到精通)

java怎么學(xué)習(xí)?java怎么入門(mén)?java在哪學(xué)?java怎么學(xué)才快?不用擔(dān)心,這里為大家提供了java速學(xué)教程(入門(mén)到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!

下載
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問(wèn)題
開(kāi)源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見(jiàn)反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線(xiàn)php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)