注解所謂何物?
在應(yīng)用代碼中
比如在Java我們經(jīng)常會(huì)看到諸如 Override, Deprecated等,
在Android開(kāi)發(fā)中,使用Dagger2這個(gè)注入框架,我們肯定會(huì)使用到 Inject, Provide, Component等
后來(lái),人們?yōu)榱私y(tǒng)一說(shuō)法,這樣的玩意,江湖中人稱(chēng)之為注解(英文名:Annotation).
注解:
注解是代碼里的特殊標(biāo)記,這些標(biāo)記可以在編譯、類(lèi)加載、運(yùn)行時(shí)被讀取,并執(zhí)行相應(yīng)的處理。
通過(guò)使用注解,攻城獅可以在不改變?cè)羞壿嫷那闆r下,在源文件中嵌入一些補(bǔ)充的信息。
簡(jiǎn)而言之,注解用一個(gè)詞就可以描述注解,那就是元數(shù)據(jù),即一種描述數(shù)據(jù)的數(shù)據(jù).
擴(kuò)展:可能有人會(huì)問(wèn),元數(shù)據(jù),是神馬,這里繼續(xù)補(bǔ)充,
元數(shù)據(jù),通俗一點(diǎn),就是描述代碼間關(guān)系,或者代碼與其他資源(例如數(shù)據(jù)庫(kù)表)之間內(nèi)在聯(lián)系的數(shù)據(jù)。
在簡(jiǎn)單點(diǎn)理解,我們?nèi)ャy行辦卡,填寫(xiě)姓名,年齡,身份證號(hào)碼,電話(huà)等等,全部填寫(xiě)完畢之后在提交給銀行的工作人員
那么,諸如姓名,年齡,身份證號(hào)碼,電話(huà)等等的這些,我們就可以稱(chēng)之為元數(shù)據(jù).
注解的特點(diǎn):
注解只提供了一種為程序元素(包、類(lèi)、構(gòu)造器、方法、成員變量、參數(shù)、局域變量)設(shè)置元數(shù)據(jù)的方法。
注解不能運(yùn)行,它僅只有成員變量,沒(méi)有方法。
注解跟public、final等修飾符的地位一樣,都是程序元素的一部分,但是,注解不能作為一個(gè)程序元素使用。
注解的方法:
關(guān)于注解,J2SE5.0版本在java.lang.annotation提供了四種元注解,專(zhuān)門(mén)注解其他的注解:
documented–注解是否將包含在JavaDoc中
Retention–什么時(shí)候使用該注解
Target–注解用于什么地方
Inherited–是否允許子類(lèi)繼承該注解
如何自定義注解:
如何自定義注解?我們習(xí)慣了new Class,其實(shí),注解一直都在,只是我們不曾看過(guò)
創(chuàng)建Annotation
我們模仿ButterKnife,寫(xiě)一個(gè)BindView的注解玩一玩,于是乎,我們有了下面的代碼:
基本的用法
在這里,我們給自定義加了兩個(gè)方法,
接下來(lái),我們自定義一個(gè)使用了該注解的JavaBean類(lèi),如下圖
使用自定義注解的類(lèi)
那么,接下來(lái)問(wèn)題來(lái)了,我該如何獲取這個(gè)自定義注解上的值???
這個(gè)時(shí)候,細(xì)心的同學(xué)可能發(fā)現(xiàn),咦,你這個(gè)Student類(lèi)上的自定義注解上的name以及age的順序和自定義上的注解順序不一致,這樣不會(huì)有影響嗎?嗯,是的,沒(méi)影響。言歸正傳,獲取自定義注解上的值我們可以通過(guò)反射去做,對(duì)反射不是很了解的話(huà),可以查看我的這片博客關(guān)于反射快速理解,
在這里,我們假定外部傳來(lái)一個(gè)Student對(duì)象,通過(guò)這個(gè)對(duì)象暴力反射獲取字段,根據(jù)其字段獲取注解上的值,我們將獲取到的值設(shè)置給上面的Student類(lèi)上,然后通過(guò)打印控制臺(tái)顯示結(jié)果,
第一步,獲取注解上的值,先上代碼圖
獲取使用注解類(lèi)上的注解值
1;通過(guò)暴力反射獲取成員變量
2;細(xì)心的同學(xué)可能會(huì)發(fā)現(xiàn),使用了自定義注解的成員變量是name字段,那么通過(guò)該字段獲取注解的字節(jié)碼
3;通過(guò)第2個(gè)步驟,即可獲取到具體的值
4;在反射里面說(shuō)到,給類(lèi)里面的變量賦值,通過(guò)set方法
第二步:測(cè)試以上代碼,能否獲取注解上的值,先上圖
測(cè)試獲取自定義注解的值
基本上,注解的簡(jiǎn)單介紹和使用,就是以上內(nèi)容,如果需要深入了解,可以自己查閱資料。
以上就是長(zhǎng)沙牛耳教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java怎么注釋?zhuān)坑惺裁从?rdquo;的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。