黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專(zhuān)注Java教育14年 全國(guó)咨詢(xún)/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁(yè) 學(xué)習(xí)攻略 Java學(xué)習(xí) 初學(xué)者學(xué)編程Java注解的使用

初學(xué)者學(xué)編程Java注解的使用

更新時(shí)間:2020-07-24 16:20:26 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽2482次

一,基本概念

Java注解是JDK5.0引入的注釋機(jī)制,可以被使用在類(lèi),方法,參數(shù)等地方中,并且可以通過(guò)Java的反射機(jī)制獲取注解中的內(nèi)容,

注解相當(dāng)于標(biāo)簽,可以標(biāo)識(shí)方法,類(lèi)或?qū)傩跃哂心承┨卣鳎诰幾g器生成的類(lèi)文件時(shí),可以被嵌入到字節(jié)碼中。另外用戶(hù)可以自

定義注解,完成定制化的開(kāi)發(fā),尤其是在利用springboot進(jìn)行項(xiàng)目開(kāi)發(fā)時(shí),我們會(huì)經(jīng)常使用注解管理spring容器的bean,從而大大

提高了開(kāi)發(fā)的效率。

二,常用注解

在開(kāi)發(fā)過(guò)程中,我們可以經(jīng)常看到一些內(nèi)置的注解:

 Override:用于校驗(yàn)該方法是否是重載方法,如果不是重載方法,而且還是使用這個(gè)注解則會(huì)報(bào)錯(cuò)。

 Deprecated:用于過(guò)時(shí)的用法,如果繼續(xù)使用,編譯器會(huì)給出警告

 SuppressWarnings:用于指示編譯器忽略注解中聲明的警告

在編寫(xiě)自定義注解時(shí),也會(huì)使用一些元注解:

1, Retention:定義了注解的保留策略(RetentionPolicy)

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public?@interface?Retention?{
????/**
?????*?Returns?the?retention?policy.
?????*?@return?the?retention?policy
?????*/
????RetentionPolicy?value();
}

其中RetentionPolicy是一個(gè)枚舉類(lèi)型,共有三種枚舉值

(1)CLASS:此注解的缺省行為,表明在程序運(yùn)行期間,注解可以被編譯器保存在類(lèi)文件中,但不會(huì)被虛擬機(jī)保留。

(2)RUNTIME:表明在程序運(yùn)行期間,既可以被編譯器保存在類(lèi)文件中,也被虛擬機(jī)保留,所以注解的內(nèi)容可以通過(guò)反射機(jī)制讀取

(3)SOURCE:注解會(huì)被編譯器丟棄

2, Target:定義了注解的作用目標(biāo)

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public?@interface?Target?{
????/**
?????*?Returns?an?array?of?the?kinds?of?elements?an?annotation?type
?????*?can?be?applied?to.
?????*?@return?an?array?of?the?kinds?of?elements?an?annotation?type
?????*?can?be?applied?to
?????*/
????ElementType[]?value();
}

其中ElementType是一個(gè)枚舉類(lèi)型,并且表明 Target注解擁有的是枚舉類(lèi)型的數(shù)組,可以被指定多個(gè)值。

(1)TYPE:允許作用在類(lèi),接口或者枚舉聲明上

(2)FIELD:允許作用在屬性字段上

(3)METHOD:允許作用在方法上

(4)PARAMETER:允許作用在參數(shù)上

(5)CONSTRUCTOR:允許作用在構(gòu)造器上

(6)LOCAL_VARIABLE:允許作用在本地變量上

(7)ANNOTATION_TYPE:允許作用在注解類(lèi)型上

(8)PACKAGE:允許作用在包上

JDK1.8之后,新增TYPE_PARAMETER和TYPE_USE兩個(gè)屬性

(9)TYPE_PARAMETER:允許作用在類(lèi)型參數(shù)上

(10)TYPE_USE:允許作用在使用類(lèi)型的地方上

3, Documented定義注解可以包含在javadoc中

4, Inherited:表明注解可以被子類(lèi)集成使用

三,自定義注解

1,使用關(guān)鍵字 interface進(jìn)行自定義注解,注解內(nèi)容可以指定注解屬性的類(lèi)型,缺省值等

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,?ElementType.FIELD})
public?@interface?MyAnnotation?{

????int?id()?default?0;

????String[]?value();
}

自定義的注解MyAnnotation包含id和value兩個(gè)屬性,其中屬性id的類(lèi)型為int,且缺省值為0,屬性value的類(lèi)型為String數(shù)組。

注意,在聲明屬性時(shí),屬性名后跟的小括號(hào)一定要加上。 MyAnnotation表明可以被使用在方法或?qū)傩宰侄紊希⑶冶痪幾g器保存在類(lèi)文件中,

一直駐留在JVM虛擬機(jī)中,所以可以通過(guò)反射訪問(wèn)到注解中的內(nèi)容。

2,使用方法

public?class?User?{
???@MyAnnotation(value?=?{"male",?"female"})
????public?void?getUser(String?name,?int?age)?{

????????System.out.println("user:?["?+?name?+?","?+?age?+?"]");
????}
}

@MyAnnotation被使用在getUser方法上,并且指定注解的vlue屬性值為male和female

3,利用反射獲取注解

public?class?MyAnnotationTest?{
????public?static?void?main(String[]?args)?throws?Exception?{
????????User?user?=?new?User();
????????//通過(guò)返回獲取實(shí)例
????????Class?userClass?=?User.class;

????????Method?method?=?userClass.getMethod("getUser",?String.class,?int.class);
????????//利用反射調(diào)用方法
????????method.invoke(user,?"Rose",?24);

????????//獲取方法上的MyAnnotation注解
????????if?(method.isAnnotationPresent(MyAnnotation.class))?{

????????????//獲取方法上的注解實(shí)例
????????????MyAnnotation?annotation?=?method.getAnnotation(MyAnnotation.class);

????????????String[]?value?=?annotation.value();

????????????for?(String?v?:?value)?{
????????????????System.out.printf("%s?",?v);
????????????}
????????}?else?{
????????????System.out.println("沒(méi)有應(yīng)用MyAnnotation注解");
????????}

????????System.out.println();

????????//獲取方法上的所有注解
????????Annotation[]?annotations?=?method.getAnnotations();
????????for?(Annotation?annotation?:?annotations)?{
????????????System.out.println(annotation);
???????}

????}
}

利用Java的反射機(jī)制獲取方法上的注解內(nèi)容,通過(guò)Method類(lèi)的getAnnotation方法可以獲取到指定的注解,getAnnotations方法可以獲取到方法上的所用注解。

運(yùn)行結(jié)果:

初學(xué)者學(xué)編程Java注解的使用

四,小結(jié)

注解相當(dāng)于標(biāo)簽,利用反射機(jī)制可以獲取到注解中的內(nèi)容,可以作用在類(lèi),方法,參數(shù)等地方,使其具有某些屬性,通過(guò)注解對(duì)程序進(jìn)行標(biāo)識(shí)來(lái)實(shí)現(xiàn)特定的處理,讓編寫(xiě)的程序更加簡(jiǎn)潔。

Java技術(shù)內(nèi)容

Java8新特性注解:http://m.ilovecolors.com.cn/javafeatures/1126.html

什么是Java注解:http://m.ilovecolors.com.cn/tutorial_java_advance/1055.html

以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“初學(xué)者學(xué)編程Java注解的使用”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日本老年人精品久久中文字幕 | 91九色偷拍 | 午夜无遮挡 | 中国一级一级全黄 | 久久久噜久噜久久综合 | 福利片成人午夜在线 | 亚洲免费二区 | 天天操天天操天天操香蕉 | 在线免费观看a视频 | 丝袜紧身裙国产在线播放 | 丁香伊人五月综合激激激 | 免费在线观看日本 | 欧美午夜性刺激在线观看免费 | 道日本一本草久 | 最新欧美日韩 | 国产精品成人观看视频网站 | yy4080午夜理论一级毛片 | 亚洲三级视频在线观看 | 日韩狠狠操 | 免费人成激情视频在线观看 | 黄色成人免费观看 | 国产级a爱做片免费观看 | 深夜免费在线观看 | 欧美乱大交xxxxxbbb | 黄色免费在线观看视频 | 亚洲欧美日韩成人一区在线 | 一区二区三区在线 | 日本 | 手机看理论片 | 羞羞视频网址 | 欧美性生活网址 | 免费人成在线观看播放国产 | 欧美日韩在线精品成人综合网 | 国产97视频在线 | 亚洲成年网 | 天天射天天射 | 欧美成人看片黄a免费看 | 韩国在线伦理片 | 成年网站在线观看视频 | 成人性动漫高清免费观看网址 | 日本黄线在线播放免费观看 | 国产在线观看xxxx免费 |