java annotation是什么,讓我們一起了解一下?
annotation是Java增加對元數(shù)據(jù)的支持,注解(annotation)與注釋是有一定區(qū)別的,可以把注解理解為代碼里的特殊標(biāo)記,這些標(biāo)記可以在編譯,類加載,運(yùn)行時(shí)被讀取,并執(zhí)行相應(yīng)的處理。
Java注解(Annotation)原理是什么?
注解本質(zhì)是一個繼承了Annotation的特殊接口,其具體實(shí)現(xiàn)類是Java運(yùn)行時(shí)生成的動態(tài)代理類。而我們通過反射獲取注解時(shí),返回的是Java運(yùn)行時(shí)生成的動態(tài)代理對象$Proxy1。
通過代理對象調(diào)用自定義注解(接口)的方法,會最終調(diào)用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應(yīng)的值,而memberValues的來源是Java常量池。
實(shí)際上Java注解與普通修飾符(public、static、void等)的使用方式并沒有多大區(qū)別,下面的例子是常見的注解:
public?class?AnnotationDemo?{ ??? ???@Test ???public?static?void?A(){ ???????System.out.println("Test....."); ???} ???@Deprecated ???@SuppressWarnings("uncheck") ???public?static?void?B(){ ???} }
通過在方法上使用@Test注解后,在運(yùn)行該方法時(shí),測試框架會自動識別該方法并單獨(dú)調(diào)用,@Test實(shí)際上是一種標(biāo)記注解,起標(biāo)記作用,運(yùn)行時(shí)告訴測試框架該方法為測試方法。
而對于@Deprecated和@SuppressWarnings(“uncheck”),則是Java本身內(nèi)置的注解,在代碼中,可以經(jīng)??匆娝鼈?,但這并不是一件好事,畢竟當(dāng)方法或是類上面有@Deprecated注解時(shí),說明該方法或是類都已經(jīng)過期不建議再用,@SuppressWarnings 則表示忽略指定警告,比如@SuppressWarnings(“uncheck”),這就是注解的最簡單的使用方式。
實(shí)戰(zhàn)操作:
首先寫一個簡單的自定義注解小程序,先自定義一個運(yùn)行時(shí)注解。
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public?@interface?HelloAnnotation?{ ????String?say()?default?"Hi"; }
然后在Main函數(shù)中解析注解。
@HelloAnnotation(say?=?"Do?it!") public?class?TestMain?{ ????public?static?void?main(String[]?args)?{ ????????HelloAnnotation?annotation?=?TestMain.class.getAnnotation(HelloAnnotation.class);//獲取TestMain類上的注解對象 ????????System.out.println(annotation.say());//調(diào)用注解對象的say方法,并打印到控制臺 ????} }
運(yùn)行程序,輸出結(jié)果如下:
Do?it!
以上就是小編今天的分享了,希望可以幫助到大家。