官方解釋:java
Java 註解用於爲 Java 代碼提供元數據。做爲元數據,註解不直接影響你的代碼執行,但也有一些類型的註解實際上能夠用於這一目的。Java 註解是從 Java5 開始添加到 Java 的。git
我的理解:github
註解≈標籤數組
咱們先不談如何實現註解,咱們從需求出發,先看看註解該如何使用。安全
註解本質是一個繼承了Annotation的特殊接口,其具體實現類是Java運行時生成的動態代理類。而咱們經過反射獲取註解時,返回的是Java運行時生成的動態代理對象$Proxy1。經過代理對象調用自定義註解(接口)的方法,會最終調用AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應的值。而memberValues的來源是Java常量池。ide
(1)元註解函數
@Retention(RetentionPolicy.RUNTIME)
Javadoc
文檔中(2)Java 內置註解代理
unchecked
警告(1.7引入)Runnable
接口就是使用了該註解)(3)自定義註解code
定義一個註解對象
// 經過 @interface 關鍵字進行定義 // 形式相似於接口,區別在於多了一個 @ 符號 public @interface MyAnnotation { // 註解的屬性 = 成員變量 // 註解只有成員變量,沒有方法 // 註解@MyAnnotation中有2個屬性:id 和 msg int id(); String msg() default "Hi" ; // 說明: // 註解的屬性以 「無形參的方法」 形式來聲明 // 方法名 = 屬性名 // 方法返回值 = 屬性類型 = 8 種基本數據類型 + 類、接口、註解及對應數組類型 // 用 default 關鍵值指定 屬性的默認值,如上面的msg的默認值 = 」Hi「 }
Demo地址以下:
https://github.com/Taoey/DAS/tree/master/JavaBase/src/main/java/annotation