Java的注解

介紹

注解(Annotation)是 JDK1.5 的新特性,是一種特殊的類,作用類似于注釋,相當(dāng)于是一個(gè)標(biāo)記,可以標(biāo)記在一個(gè)類身上的不同位置,可以修飾不同的成員變量、方法甚至是類。注解在實(shí)際開(kāi)發(fā)中用的非常廣泛,尤其是現(xiàn)在流行的基于注解式開(kāi)發(fā)。

定義

注解通過(guò) @interface 關(guān)鍵字進(jìn)行定義。

public @interface DemoAnnotation {
}

它的形式跟接口很類似,不過(guò)前面多了一個(gè) @ 符號(hào)。上面的代碼就創(chuàng)建了一個(gè)名字為 DemoAnnotation的注解。

應(yīng)用

@DemoAnnotation
public class Test {
}

創(chuàng)建一個(gè)類 Test,然后在類定義的地方加上 @DemoAnnotation 可以用 DemoAnnotation 注解這個(gè)類。

屬性

注解的屬性即成員變量。注解只有成員變量,沒(méi)有方法。注解的成員變量在注解的定義中以“無(wú)形參的方法”形式來(lái)聲明,其方法名定義了該成員變量的名字,其返回值定義了該成員變量的類型。

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DemoAnnotation {
    int id();
    String msg();
}

上面代碼定義了 DemoAnnotation 這個(gè)注解中擁有 id 和 msg 兩個(gè)屬性。在使用的時(shí)候,應(yīng)該給它們進(jìn)行賦值。
賦值的方式是在注解的括號(hào)內(nèi)以 value=”” 形式,多個(gè)屬性之前用 ,隔開(kāi)。

@DemoAnnotation(id=3,msg="hi annotation")
public class Test {
}

需要注意的是,在注解中定義屬性時(shí)它的類型必須是 8 種基本數(shù)據(jù)類型外加 類、接口、注解及它們的數(shù)組。注解中屬性可以有默認(rèn)值,默認(rèn)值需要用 default 關(guān)鍵值指定。比如:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface DemoAnnotation {
    public int id() default -1;
    public String msg() default "Hi";
}

DemoAnnotation 中:

  • id 屬性默認(rèn)值為 -1
  • msg 屬性默認(rèn)值為 Hi
    它可以這樣應(yīng)用。
@DemoAnnotation()
public class Test {}

因?yàn)橛心J(rèn)值,所以無(wú)需要再在 @DemoAnnotation 后面的括號(hào)里面進(jìn)行賦值了,這一步可以省略。另外,還有一種情況。如果一個(gè)注解內(nèi)僅僅只有一個(gè)名字為 value 的屬性時(shí),應(yīng)用這個(gè)注解時(shí)可以直接接屬性值填寫(xiě)到括號(hào)內(nèi)。

public @interface DemoAnnotation {
    String value();
}

上面代碼中,DemoAnnotation 這個(gè)注解只有 value 這個(gè)屬性。所以可以這樣應(yīng)用。

@DemoAnnotation("hi")

這和下面的效果是一樣的

@DemoAnnotation(value="hi")

最后,還需要注意的一種情況是一個(gè)注解沒(méi)有任何屬性。比如

public @interface DemoAnnotation {}

那么在應(yīng)用這個(gè)注解的時(shí)候,括號(hào)都可以省略。

@DemoAnnotation
public void testMethod(){}

分類

注解可以分為四大類:

  • 元注解
  • 預(yù)置注解
  • 自定義注解
  • 第三方的注解(根據(jù)引入的三方包,查看對(duì)應(yīng)的文檔)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫(xiě)文章,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 3,144評(píng)論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,663評(píng)論 1 32
  • 概念: Java 注解用于為 Java 代碼提供元數(shù)據(jù)。作為元數(shù)據(jù),注解不直接影響你的代碼執(zhí)行,但也有一些類型的注...
    木棍兒閱讀 487評(píng)論 0 0
  • 注解可以為Java代碼中添加信息,然后在某個(gè)時(shí)刻去運(yùn)用它。Java內(nèi)置了三種注解,分別為: @Override,(...
    愛(ài)你雨落閱讀 475評(píng)論 0 0
  • 元注解 元注解是一種基本注解,它能夠應(yīng)用到其它的注解上面。元標(biāo)簽有: @Retention、@Documented...
    一塊自由的磚閱讀 260評(píng)論 0 0

友情鏈接更多精彩內(nèi)容