天天看點

Java注解(Annotation)的基本概念

Annotation的作用

  • 不是程式本身,可以對程式做出解釋,就和注釋類似;
  • 可以被其他程式(例如:編譯器)讀取。(注解資訊處理流程,是注解和注釋的重大差別。如果沒有注解資訊的處理流程,則注解毫無意義)

Annotation的格式

  • 注解是以“@注釋名”在代碼中存在的,還可以添加一些參數值,例如:

    @SuppressWarnings(value="unchecked")

Annotation在哪裡使用?

  • 可以附加在package,class,method,field等上面,相當于給它們添加了額外的輔助資訊,我們可以通過反射機制程式設計實作對這些中繼資料的通路。

内置注解

  • @Override

    -定義在

    java.lang.Override

    中,此注釋隻适用于修辭方法,表示一個方法聲明打算重寫超類中的另一個方法聲明。
  • @Deprecated

    -定義在

    java.lang.Deprecated

    中,此注釋可用于修辭方法,類,屬性,表示不鼓勵程式員使用這樣的元素,通常是因為它很危險或存在更好的選擇。
  • @SuppressWarnings

    -定義在

    java.lang.SuppressWarnings

    中,用來抑制編譯時的警告資訊。

元注解

  • 元注解的作用就是負責注解其他注解。Java定義個4個标準的meta-annotation類型,它們被用來提供對其它annotation類型作說明
  • 這些類型和他們所支援的類在java.lang.annotation包中可以找到

    @Target

    @Retention

    @Documented

    @Inherited

@Target – 表示該注解用于什麼地方。如果不明确指出,該注解可以放在任何地方。以下是一些可用的參數。需要說明的是:屬性的注解是相容的,如果你想給7個屬性都添加注解,僅僅排除一個屬性,那麼你需要在定義target包含所有的屬性。

  • ElementType.TYPE:用于描述類、接口或enum聲明
  • ElementType.FIELD:用于描述執行個體變量
  • ElementType.METHOD
  • ElementType.PARAMETER
  • ElementType.CONSTRUCTOR
  • ElementType.LOCAL_VARIABLE
  • ElementType.ANNOTATION_TYPE 另一個注釋
  • ElementType.PACKAGE 用于記錄java檔案的package資訊

@Retention– 定義該注解的生命周期。

  • RetentionPolicy.SOURCE – 在編譯階段丢棄。這些注解在編譯結束之後就不再有任何意義,是以它們不會寫入位元組碼。@Override, @SuppressWarnings都屬于這類注解。
  • RetentionPolicy.CLASS – 在類加載的時候丢棄。在位元組碼檔案的進行中有用。注解預設使用這種方式。
  • RetentionPolicy.RUNTIME– 始終不會丢棄,運作期也保留該注解,是以可以使用反射機制讀取該注解的資訊。我們自定義的注解通常使用這種方式。

@Documented–一個簡單的Annotations标記注解,表示是否将注解資訊添加在java文檔中。

@Inherited – 定義該注釋和子類的關系

自定義注解

自定義注解的簡單講解(使用注解的方式将javabean類轉換為資料庫表)