<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java annotation是什麼,讓我們一起了解一下?
annotation是Java增加對元數據的支援,註解(annotation)與註釋是有一定區別的,可以把註解理解爲代碼裏的特殊標記,這些標記可以在編譯,類加載,執行時被讀取,並執行相應的處理。
Java註解(Annotation)原理是什麼?
註解本質是一個繼承了Annotation的特殊接口,其具體實現類是Java執行時生成的動態代理類。而我們透過反射獲取註解時,返回的是Java執行時生成的動態代理對象$Proxy1。
透過代理對象調用自訂註解(接口)的方法,會最終調用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應的值,而memberValues的來源是Java常量池。
實際上Java註解與普通修飾符(public、static、void等)的使用方式並沒有多大區別,下面的例子是常見的註解:
public class AnnotationDemo { @Test public static void A(){ System.out.println("Test....."); } @Deprecated @SuppressWarnings("uncheck") public static void B(){ }}
透過在方法上使用@Test註解後,在執行該方法時,測試框架會自動識別該方法並單獨調用,@Test實際上是一種標記註解,起標記作用,執行時告訴測試框架該方法爲測試方法。
而對於@Deprecated和@SuppressWarnings(“uncheck”),則是Java本身內置的註解,在代碼中,可以經常看見它們,但這並不是一件好事,畢竟當方法或是類上面有@Deprecated註解時,說明該方法或是類都已經過期不建議再用,@SuppressWarnings 則表示忽略指定警告,比如@SuppressWarnings(“uncheck”),這就是註解的最簡單的使用方式。
實戰操作:
首先寫一個簡單的自訂註解小程序,先自訂一個執行時註解。
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface HelloAnnotation { String say() default "Hi";}
然後在Main函數中解析註解。
@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());//調用註解對象的say方法,並打印到控制檯 }}
執行程序,輸出結果如下:
Do it!