成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

java中的注解(Annotation)

李義 / 3133人閱讀

摘要:在中,注解是被當(dāng)做修飾符如之類(lèi)來(lái)使用的。常用注解修飾重載父類(lèi)方法修飾未來(lái)將被拋棄的類(lèi)方法屬性等等關(guān)閉不當(dāng)編譯器警告信息。注解來(lái)源分類(lèi)來(lái)自的注解如等等三方的注解如中的等等自定義注解通過(guò)元注解自定義的注解。是一個(gè)標(biāo)記注解,沒(méi)有成員。

簡(jiǎn)介

注解,java中提供了一種原程序中的元素關(guān)聯(lián)任何信息、任何元素的途徑的途徑和方法。

注解是那些插入到源代碼中使用其他工具可以對(duì)其進(jìn)行處理的標(biāo)簽。注解不會(huì)改變程序的編譯方式。java編譯器會(huì)對(duì)包含注解與不包含注解的代碼生成相同的虛擬機(jī)指令。在java中,注解是被當(dāng)做修飾符(如public/static之類(lèi))來(lái)使用的。

注解與注釋

注釋是供人看的,注解是供程序調(diào)用的。一種是程序員寫(xiě)給另一個(gè)程序員的,一種是程序員寫(xiě)給計(jì)算機(jī)解析的。

常用注解

@Override : 修飾重載父類(lèi)方法;

@Deprecated : 修飾未來(lái)將被拋棄的類(lèi)/方法/屬性等等;

@SuppressWarnings: 關(guān)閉不當(dāng)編譯器警告信息。

注解運(yùn)行機(jī)制分類(lèi)

源碼注解: 注解只在源碼中存在,編譯成.class文件中不存在;

編譯時(shí)注解: 注解存在于源碼與.class中,運(yùn)行時(shí)不存在;

運(yùn)行時(shí)注解: 在所有階段都存在,可以影響程序運(yùn)行邏輯。

注解來(lái)源分類(lèi)

來(lái)自jdk的注解:如@Override /@Deprecated等等;

三方的注解: 如junit中的@Test/@Before等等;

自定義注解: 通過(guò)元注解自定義的注解。

元注解

給注解進(jìn)行注解,用于自定義注解。

@Target: 指明定義的注解的作用域,其值包括:

ElementType.CONSTRUCTOR: 構(gòu)造方法聲明;

ElementType.FIELD: 屬性/字段聲明;

ElementType.LOCAL_VARIABLE: 局部變量聲明;

ElementType.METHOD: 方法聲明;

ElementType.PACKAGE: 包聲明;

ElementType.PARAMETER: 參數(shù)聲明;

ElementType.TYPE: 類(lèi)接口聲明;

ElementType.ANNOTATION_TYPE: 注解類(lèi)型聲明;

ElementType.TYPE_PARAMETER: 類(lèi)型參數(shù)聲明(@since 1.8);

ElementType.TYPE_USE: 類(lèi)型使用(@since 1.8)

@Retention: 自定義注解的生命周期,其值包括:

RetentionPolicy.SOURCE: 只在源碼顯示,編譯時(shí)丟棄;

RetentionPolicy.CLASS: 編譯時(shí)記錄到.class中,運(yùn)行時(shí)忽略;

RetentionPolicy.RUNTIME: 運(yùn)行時(shí)存在,可通過(guò)反射來(lái)讀取。

@Inherited: 一個(gè)標(biāo)記注解,闡述了某個(gè)被標(biāo)注的類(lèi)型是被繼承的,只能繼承與類(lèi)。

@Documented: 用于描述其它類(lèi)型的annotation應(yīng)該被作為被標(biāo)注的程序成員的公共API,因此可以被例如javadoc此類(lèi)的工具文檔化。Documented是一個(gè)標(biāo)記注解,沒(méi)有成員。

自定義注解
//@Target(ElementType.METHOD)
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
    String desc() default "";
    String author() default "";
    int age() default 18;
}

使用關(guān)鍵字@interface定義注解;

成員變量以無(wú)參無(wú)異常的方式聲明;

可以通過(guò)default關(guān)鍵字給成員變量指定默認(rèn)值;

成員變量的類(lèi)型是受限制的,包括原始類(lèi)型、String、Class、Annotation、Enumeration;

如果注解只有一個(gè)成員變量,則成員名稱(chēng)必須取名value(),在使用中可以忽略成員名稱(chēng)與賦值號(hào)(=);

注解可以沒(méi)有成員,沒(méi)有成員的注解稱(chēng)為標(biāo)示注解。

使用注解
// @<注解名稱(chēng)>(<成員名1>=<成員值1>,<成員名2>=<成員值2> ...)

@Description(desc = "I"m class annotation")
public class AnnotationApp {

    @Description(desc = "I"m method annotation",author = "rudy")
    public String eyeColor(){
        return "red";
    }
}
解析注解

通過(guò)反射獲取類(lèi)、方法、成員上的運(yùn)行時(shí)注解信息,從而實(shí)現(xiàn)動(dòng)態(tài)控制程序運(yùn)行的邏輯。

import Annotation.Description;
import org.junit.Test;

public class AnnotationTest {

    @Test
    public void testParse() throws ClassNotFoundException {
        // 取出注解
        Class cls = Class.forName("Annotation.AnnotationApp");
        boolean isExit =  cls.isAnnotationPresent(Description.class);
        if(isExit){
            // 做邏輯處理
            Description annotation = (Description) cls.getAnnotation(Description.class);
            System.out.println("get annotation:" + annotation.desc());
        }else{
            System.out.println("no annotation!");
        }
    }
}

使用類(lèi)加載器加載類(lèi),獲取類(lèi)對(duì)象;

判斷是否存在類(lèi)注解;

取出類(lèi)注解,做邏輯處理;

方法注解類(lèi)似。

他山之石

深入理解Java:注解(Annotation)--注解處理器: http://blog.csdn.net/z69183787/article/details/40378309

全面解析Java注解(視頻):http://www.imooc.com/learn/456

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69846.html

相關(guān)文章

  • 簡(jiǎn)單介紹 Java 中的注解 (Annotation)

    摘要:例子首先來(lái)看一個(gè)例子這里用了目的是告訴編譯器這個(gè)方法重寫(xiě)了父類(lèi)的方法如果編譯器發(fā)現(xiàn)父類(lèi)中沒(méi)有這個(gè)方法就會(huì)報(bào)錯(cuò)這個(gè)注解的作用大抵是防止手滑寫(xiě)錯(cuò)方法同時(shí)增強(qiáng)了程序的可讀性這里需要指出一點(diǎn)去掉并不會(huì)影響程序的執(zhí)行只是起到標(biāo)記的作用找到的實(shí)現(xiàn)關(guān)注點(diǎn) 1. 例子 首先來(lái)看一個(gè)例子: @Override public String toString() { return xxxxx; ...

    LMou 評(píng)論0 收藏0
  • 聊聊Java注解及實(shí)現(xiàn)

    摘要:前言注解就是提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)的途徑和方法。注解是一個(gè)接口,程序可以通過(guò)反射來(lái)獲取指定程序元素的對(duì)象,然后通過(guò)對(duì)象來(lái)獲取注解里面的元數(shù)據(jù)。注解是及以后版本引入的。綜上所述元數(shù)據(jù)以標(biāo)簽的形式存在于代碼中。 前言 Annotation(注解)就是Java提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法。Annotion(注解...

    The question 評(píng)論0 收藏0
  • Java基礎(chǔ)知識(shí)整理之注解

    摘要:注解提供了一種安全的類(lèi)似注釋的機(jī)制,用來(lái)將任何的信息或元數(shù)據(jù)與程序元素類(lèi)方法成員變量等進(jìn)行關(guān)聯(lián)。為程序的元素類(lèi)方法成員變量加上更直觀更明了的說(shuō)明,這些說(shuō)明與程序的業(yè)務(wù)邏輯無(wú)關(guān),并且提供給指定的工具或框架使用。 什么是注解? Annotation 是 Java5 之后開(kāi)始引入的新特性,中文為注解。注解提供了一種安全的類(lèi)似注釋的機(jī)制,用來(lái)將任何的信息或元數(shù)據(jù)(metadata)與程序元素(...

    blastz 評(píng)論0 收藏0
  • java深度學(xué)習(xí)——注解

    摘要:的在日常開(kāi)發(fā),特別是開(kāi)發(fā)中使用廣泛,各種框架,測(cè)試框架多多少少都會(huì)引入一些注解。的功能是作用于程序元數(shù)據(jù)的特殊類(lèi)型。而在編譯期使用注解則需要特殊的工具,本文不討論。可以看到通過(guò)類(lèi)中的反射方法獲取到了這個(gè)類(lèi)的注解以及其方法的注解。 Java的Annotation在日常開(kāi)發(fā),特別是java web開(kāi)發(fā)中使用廣泛,各種web框架,測(cè)試框架多多少少都會(huì)引入一些注解。若對(duì)java注解有一個(gè)全面深...

    Eric 評(píng)論0 收藏0
  • Java中的注解是怎樣工作的

    摘要:另一個(gè)很重要的因素是定義了一種標(biāo)準(zhǔn)的描述元數(shù)據(jù)的方式。對(duì)于注解,它的用戶(hù)就是虛擬機(jī),工作在字節(jié)碼層面,在編譯階段進(jìn)行檢查,其處理機(jī)制主要是內(nèi)部處理。 什么是注解 用一個(gè)詞就可以描述注解,那就是元數(shù)據(jù),即一種描述數(shù)據(jù)的數(shù)據(jù)。所以,可以說(shuō)注解就是源代碼的元數(shù)據(jù)。比如,下面這段代碼: @Override public String toString() { return This is St...

    edagarli 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<