成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java注解使用及原理解析

瀏覽:4日期:2022-08-31 13:28:32

基本特性

1、jdk 1.5之后才引入的。

2、用來說明程序的。(注釋是給程序員看的,注解就是給電腦看的)

java注解的作用分類

1、編寫文檔:通過代碼標(biāo)識(shí)的注解生成文檔。【生成doc文檔】

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

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:softjdkbinjavadoc.exe .TestCode.java -encoding utf-8 -docEncoding utf-8 -charset utf-8

生成了一大堆的東西:

Java注解使用及原理解析

打開TestCode.html可以發(fā)現(xiàn),我們的java api手冊(cè)就是這樣生產(chǎn)的。

注解來源分類

1、jdk自帶的注解,如常見的override(重寫校驗(yàn)),deprecated(表示棄用)

2、自定義的注解

1)格式, 以override為例:

Java注解使用及原理解析

2)注解的本質(zhì)

我們編寫一個(gè)簡(jiǎn)單的注解

MyAnnotation.java

public @interface MyAnnotation {}

我們通過編譯和反編譯看下最終是什么樣的結(jié)果:

D:softjdkbinjavac.exe MyAnnotation.java

D:softjdkbinjavap.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):

基本數(shù)據(jù)類型 String 枚舉 注解 以及以上四種類型的數(shù)組

例子:

public enum Person { PS;}public @interface Annotation2 {}public @interface MyAnnotation { String stringValue(); int integerValue(); Person personValue(); Annotation2 myAnnotationValue(); String[] stringArrayValue();}

屬性的使用,需要注意幾點(diǎn):

定義了屬性在使用的時(shí)候就要給屬性賦值,除非設(shè)置default值。如:String stringValue() default 'aaa'; 如果屬性為value且屬性只有這一個(gè),那么value可以省略,直接填寫屬性值。 如果是數(shù)組,需要用{}包含起來。

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è)。

@target, 用于指定注解的使用位置。如@Target(ElementType.ANNOTATION_TYPE),@Target(value = {ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})。 @Inherited,表示父類加了這個(gè)注解,子類也自動(dòng)加上。 @Documented, 表示這個(gè)注解的信息在執(zhí)行javadoc的時(shí)候是否抽取到api文檔中。 @Retention,表示注解被保留的階段,java類,class文件,以及被jvm讀取。總共三種。RetentionPolicy.SOURCE, RetentionPolicy.CLASS, RetentionPolicy.RUNTIME

元注解的內(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 = %sn', i, s); }}

輸出結(jié)果:

Connected to the target VM, address: ’127.0.0.1:49586’, transport: ’socket’i = 1, s = xxxDisconnected 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ì)用到這一步,去獲取值。)

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美国产成人在线| 开心九九激情九九欧美日韩精美视频电影| 亚洲午夜视频在线观看| 欧美日韩一区二区高清| 精品国产免费人成电影在线观看四季| 日韩主播视频在线| 亚洲欧美视频| 亚洲综合色区另类av| 影音先锋久久| 国产精品久久777777| 欧美福利影院| 久久久噜噜噜久久中文字幕色伊伊| 懂色av一区二区在线播放| 91精选在线观看| 国产资源在线一区| 欧美精品丝袜中出| 玖玖九九国产精品| 在线影院国内精品| 午夜国产精品影院在线观看| 国产精品久久久久久久久婷婷 | 亚洲午夜精品国产| 国产精品污www在线观看| 91视频.com| 久久久久久久久一| 牛夜精品久久久久久久99黑人 | 精品一区二区免费看| 欧美精品乱码久久久久久按摩| 久久99精品国产91久久来源| 欧美日韩第一区日日骚| 国产精品99久久久| 日韩一级片在线观看| 国产精品一区二区三区四区| 欧美精品v国产精品v日韩精品| 国产成人亚洲精品青草天美| 日韩精品一区二区三区在线观看 | 欧美美女激情18p| 国产高清不卡一区二区| 日韩午夜av一区| 99久久精品免费精品国产| 久久久久久久久岛国免费| 91麻豆自制传媒国产之光| 国产精品沙发午睡系列990531| 91久久黄色| 亚洲第一激情av| 欧美婷婷六月丁香综合色| 欧美日韩精品欧美日韩精品一 | 青青草国产成人av片免费| 欧美网站大全在线观看| 国产91精品在线观看| 久久亚洲综合色一区二区三区| 欧美一区网站| 亚洲你懂的在线视频| 欧美综合二区| 国产一区二区调教| 国产午夜亚洲精品理论片色戒 | 亚洲影视在线| 免费的国产精品| 精品国产一区二区三区久久久蜜月 | 欧美日韩亚洲综合一区二区三区| 成人午夜电影网站| 亚洲人精品午夜| 久久一二三四| 国模大尺度一区二区三区| 精品理论电影在线| 在线播放精品| 蜜臀av一区二区在线观看| 日韩一区二区三区免费观看| 欧美日韩一区二区三区免费| 伊人色综合久久天天人手人婷| 久久香蕉精品| 国产精品69毛片高清亚洲| 久久久精品免费观看| 国产日韩欧美三区| 欧美视频在线观看一区二区| 九九热在线视频观看这里只有精品| 欧美成人video| 中文字幕亚洲区| 久久免费高清| 成人性生交大片免费| 国产精品乱子久久久久| 蘑菇福利视频一区播放| 久久精品国产99久久6| 久久―日本道色综合久久| 亚洲免费播放| 久久精品国产99久久6| 日本一区二区成人在线| 久久看片网站| 99久久精品一区二区| 亚洲国产乱码最新视频| 欧美一区二区精品在线| 亚洲婷婷在线| 精一区二区三区| 亚洲色图欧美激情| 欧美日韩国产在线播放网站| 欧美一区二区三区另类| 天天综合网天天综合色| 精品国产露脸精彩对白| 亚洲影院一区| 不卡的av中国片| 一区二区三区在线视频观看58 | 精品999日本| 国产在线不卡一区| 亚洲精品国产一区二区三区四区在线| 日韩一级片网站| 国产不卡高清在线观看视频| 亚洲综合在线免费观看| 日韩免费视频一区二区| 欧美综合77777色婷婷| 午夜精品国产| 美女在线视频一区| 日韩一区中文字幕| 欧美一区二区视频在线观看2020 | 亚洲高清123| 国产毛片精品视频| 亚洲一区国产视频| 久久精品人人做人人综合| 色哟哟在线观看一区二区三区| 欧美国产精品| 精品亚洲免费视频| 一区二区三区精密机械公司| 久久综合狠狠综合久久激情| 91久久精品一区二区三区| 黄色亚洲大片免费在线观看| 国产激情视频一区二区三区欧美| 亚洲精选一二三| 久久亚洲一区二区三区四区| 欧美在线999| 国产精品久久久久久久久久直播 | 在线综合视频| 欧美激情1区2区3区| 国产一区二区免费看| 亚洲午夜一二三区视频| 欧美激情综合五月色丁香| 5858s免费视频成人| 久久最新视频| 日韩午夜免费| 91视视频在线观看入口直接观看www| 六月丁香婷婷久久| 亚洲精品日产精品乱码不卡| 久久嫩草精品久久久精品一| 7777精品久久久大香线蕉 | 欧洲精品在线观看| 一本色道久久综合亚洲精品婷婷| 91一区二区在线| 国产在线播精品第三| 日韩精品亚洲一区| 亚洲蜜臀av乱码久久精品| 国产网站一区二区三区| 日韩欧美自拍偷拍| 91.com在线观看| 国产日韩三区| 精品福利av| 91免费小视频| 国产91综合一区在线观看| 狠狠久久亚洲欧美| 奇米综合一区二区三区精品视频 | 欧美成人精品福利| 欧美日韩aaa| 91搞黄在线观看| 久久亚洲综合| 性高湖久久久久久久久| 一区二区高清视频| 亚洲日韩成人| 亚洲国产精选| 好吊日精品视频| 亚洲图片在线| 黑人一区二区| 欧美日本亚洲韩国国产| 91视频精品在这里| 91亚洲国产成人精品一区二三| 成人一区二区三区视频| 极品少妇xxxx精品少妇| 久久99久久久欧美国产| 亚洲超碰97人人做人人爱| 一区二区三区产品免费精品久久75| 国产精品麻豆网站| 国产农村妇女精品| 国产亚洲一本大道中文在线| 欧美videossexotv100| 精品剧情在线观看| 欧美精品一区二区三| 久久综合资源网| 中文字幕免费不卡| 国产精品萝li| 亚洲日本丝袜连裤袜办公室| 亚洲桃色在线一区| 一区二区免费在线| 亚洲一区二区五区| 亚洲欧美欧美一区二区三区| 亚洲欧美区自拍先锋| 亚洲在线免费播放| 亚洲精品成人精品456| 亚洲一区二区三区在线| 天堂成人免费av电影一区| 日韩精品一区二区三区老鸭窝| 欧美一区二区三区免费大片| 日韩视频免费观看高清完整版| 精品久久一二三区| 久久蜜桃一区二区| 国产精品私房写真福利视频|