這篇文章主要講解了Java注解的詳細(xì)解析,內(nèi)容清晰明了,對(duì)此有興趣的小伙伴可以學(xué)習(xí)一下,相信大家閱讀完之后會(huì)有幫助。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、雅安服務(wù)器托管、營(yíng)銷軟件、網(wǎng)站建設(shè)、魯?shù)榫W(wǎng)站維護(hù)、網(wǎng)站推廣。
基本特性
1、jdk 1.5之后才引入的。
2、用來說明程序的。(注釋是給程序員看的,注解就是給電腦看的)
java注解的作用分類
1、編寫文檔:通過代碼標(biāo)識(shí)的注解生成文檔?!旧蒬oc文檔】
2、代碼分析:通過代碼標(biāo)識(shí)的注解對(duì)代碼進(jìn)行分析?!臼褂梅瓷洹?/p>
3、編譯檢查:通過代碼標(biāo)識(shí)的注解讓編譯器能夠?qū)崿F(xiàn)基本的編譯檢查。【override】
測(cè)試類:
/** * 我的javadoc測(cè)試 */ public class TestCode { /** * 計(jì)算兩個(gè)數(shù)的和 * @param a 整數(shù)a * @param b 整數(shù)b * @return 返回兩個(gè)數(shù)的和 */ public int add(int a, int b){ return a+b; } }
對(duì)于2、3兩點(diǎn)我們應(yīng)該是知道的。盡管可能不知道里面的原理。但是是平時(shí)都在用的。但是對(duì)于1點(diǎn)還可以生成doc文檔?
測(cè)試操作如下:
D:\soft\jdk\bin\javadoc.exe .\TestCode.java -encoding utf-8 -docEncoding utf-8 -charset utf-8
生成了一大堆的東西:
打開TestCode.html可以發(fā)現(xiàn),我們的java api手冊(cè)就是這樣生產(chǎn)的。
注解來源分類
1、jdk自帶的注解,如常見的override(重寫校驗(yàn)),deprecated(表示棄用)
2、自定義的注解
1)格式, 以override為例:
2)注解的本質(zhì)
我們編寫一個(gè)簡(jiǎn)單的注解
MyAnnotation.java
public @interface MyAnnotation {}
我們通過編譯和反編譯看下最終是什么樣的結(jié)果:
D:\soft\jdk\bin\javac.exe MyAnnotation.java
D:\soft\jdk\bin\javap.exe MyAnnotation.class
結(jié)果如下:
public interface MyAnnotation extends java.lang.annotation.Annotation {
}
可以發(fā)現(xiàn)注解的本質(zhì)就是接口,這個(gè)接口繼承了jdk里面的Annotation接口。
3)注解的屬性
由于注解本質(zhì)為接口,那么里面可以定義未實(shí)現(xiàn)的方法。這些稱為注解的“屬性”。
屬性的返回類型有(返回值不能為void):
例子:
public enum Person { PS; } public @interface Annotation2 { } public @interface MyAnnotation { String stringValue(); int integerValue(); Person personValue(); Annotation2 myAnnotationValue(); String[] stringArrayValue(); }
屬性的使用,需要注意幾點(diǎn):
public @interface MyAnnotation { String stringValue() default "xxx"; int integerValue(); String[] stringArrayValue(); } public @interface Annotation2 { String value(); } @MyAnnotation(integerValue = 1, stringArrayValue = {"aaa", "bbb"}) @Annotation2("default") public class TestCode { /** * 計(jì)算兩個(gè)數(shù)的和 * @param a 整數(shù)a * @param b 整數(shù)b * @return 返回兩個(gè)數(shù)的和 */ public int add(int a, int b){ return a+b; } @Override public String toString() { return super.toString(); } }
元注解
元注解是你在編寫注解的時(shí)候,上面加的注解,就是注解的注解。主要有4個(gè)。
元注解的內(nèi)容,可以到j(luò)dk源碼里面看一下,更有利于理解。
解析注解
這個(gè)是最關(guān)鍵了,以上加了這么多的屬性,并且還為這些屬性附了值,那么是希望程序讀取這些值,進(jìn)行使用的。那其實(shí)就是要看如何拿到這些注解配置的值。
測(cè)試:
MyAnnotition.java:
package annotation_; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String stringValue() default "xxx"; int integerValue(); }
TestCode.java:
package annotation_; @MyAnnotation(integerValue = 1) public class TestCode { public static void main(String[] args) { Class<TestCode> testCodeClass = TestCode.class; MyAnnotation myAnnotation = testCodeClass.getAnnotation(MyAnnotation.class); int i = myAnnotation.integerValue(); String s = myAnnotation.stringValue(); System.out.printf("i = %d, s = %s\n", i, s); } }
輸出結(jié)果:
Connected to the target VM, address: '127.0.0.1:49586', transport: 'socket'
i = 1, s = xxx
Disconnected from the target VM, address: '127.0.0.1:49586', transport: 'socket'Process finished with exit code 0
是不是感覺可以當(dāng)配置文件使用。但是最主要的問題是myAnnotation.integerValue(),myAnnotation.stringValue()為什么可以拿到對(duì)應(yīng)的值,這個(gè)也是最核心的問題。
那就是getAnnotation里面返回了一個(gè)實(shí)現(xiàn)了MyAnnotation注解(注解的本質(zhì)是接口)的實(shí)例。這個(gè)類大概是長(zhǎng)這樣的。
package annotation_; import java.lang.annotation.Annotation; public class MyAnnotationImpl implements MyAnnotation{ public String stringValue() { return "xxx"; } public int integerValue() { return 0; } public Class<? extends Annotation> annotationType() { return null; } }
所以就可以通過抽象方法獲取到對(duì)應(yīng)的值。(如何生成這樣的一個(gè)類,只是學(xué)習(xí)注解,可以不關(guān)心。要不然,只能看里面的源碼。因?yàn)槿绻远x注解,你只會(huì)用到這一步,去獲取值。)
看完上述內(nèi)容,是不是對(duì)Java注解的詳細(xì)解析有進(jìn)一步的了解,如果還想學(xué)習(xí)更多內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文題目:Java注解的詳細(xì)解析
當(dāng)前地址:http://chinadenli.net/article18/jsidgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站改版、移動(dòng)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)