java註解的簡單介紹

我是壞男孩發表於2018-11-01

什麼是註解

1.註解就是AnnontationAnnontation是Java5開始引入的新特徵,中文名稱叫做註解,它提供了一種安全的類似註釋的機制,可以起到減少配置的成果,給程式起到輔助性的作用

註解有什麼用處

1.註解可以生成文件

2.註解可以逐漸替代配置

3.在編譯時進行格式檢查

註解的原理:

註解本質是一個繼承了Annotation的特殊介面,其具體實現類是Java執行時生成的動態代理類。而我們通過反射獲取註解時,返回的是Java執行時生成的動態代理物件$Proxy1。通過代理物件呼叫自定義註解(介面)的方法,會最終呼叫AnnotationInvocationHandler的invoke方法。該方法會從memberValues這個Map中索引出對應的值。而memberValues的來源是Java常量池。

自定義註解:

自定義註解類編寫的一些規則:
  1. Annotation型定義為@interface, 所有的Annotation會自動繼承java.lang.Annotation這一介面,並且不能再去繼承別的類或是介面.
  2. 引數成員只能用public或預設(default)這兩個訪問權修飾
  3. 引數成員只能用基本型別byte,short,char,int,long,float,double,boolean八種基本資料型別和String、Enum、Class、annotations等資料型別,以及這一些型別的陣列.
  4. 要獲取類方法和欄位的註解資訊,必須通過Java的反射技術來獲取 Annotation物件,因為你除此之外沒有別的獲取註解物件的方法
  5. 註解也可以沒有定義成員, 不過這樣註解就沒啥用了
PS:自定義註解需要使用到元註解

自定義註解例項

 import java.lang.annotation.Documented;
 2 import java.lang.annotation.Retention;
 3 import java.lang.annotation.Target;
 4 import static java.lang.annotation.ElementType.FIELD;
 5 import static java.lang.annotation.RetentionPolicy.RUNTIME;
 6 
 7 /**
 8  * 水果名稱註解
 9  */
10 @Target(FIELD)
11 @Retention(RUNTIME)
12 @Documented
13 public @interface FruitName {
14     String value() default "";
15 }

  

參考連結:https://www.cnblogs.com/acm-bingzi/p/javaAnnotation.html#undefined