java annotation是什么,讓我們一起了解一下?
annotation是Java增加對元數(shù)據(jù)的支持,注解(annotation)與注釋是有一定區(qū)別的,可以把注解理解為代碼里的特殊標記,這些標記可以在編譯,類加載,運行時被讀取,并執(zhí)行相應的處理。
Java注解(Annotation)原理是什么?
注解本質(zhì)是一個繼承了Annotation的特殊接口,其具體實現(xiàn)類是Java運行時生成的動態(tài)代理類。而我們通過反射獲取注解時,返回的是Java運行時生成的動態(tài)代理對象$Proxy1。
通過代理對象調(diào)用自定義注解(接口)的方法,會最終調(diào)用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應的值,而memberValues的來源是Java常量池。
實際上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注解后,在運行該方法時,測試框架會自動識別該方法并單獨調(diào)用,@Test實際上是一種標記注解,起標記作用,運行時告訴測試框架該方法為測試方法。
而對于@Deprecated和@SuppressWarnings(“uncheck”),則是Java本身內(nèi)置的注解,在代碼中,可以經(jīng)常看見它們,但這并不是一件好事,畢竟當方法或是類上面有@Deprecated注解時,說明該方法或是類都已經(jīng)過期不建議再用,@SuppressWarnings 則表示忽略指定警告,比如@SuppressWarnings(“uncheck”),這就是注解的最簡單的使用方式。
實戰(zhàn)操作:
首先寫一個簡單的自定義注解小程序,先自定義一個運行時注解。
@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方法,并打印到控制臺 ????} }
運行程序,輸出結(jié)果如下:
Do?it!
以上就是小編今天的分享了,希望可以幫助到大家。