Java 註解

概述

註解時在Java5中開始引入的概念。可以將註解想象成標籤,給指定的方法、類、變量、參數、包等貼上一個標籤。

Java 註解

@Override 註解就是告訴編譯器,這個方法是重寫的父類方法。

還有@Test、@Deprecated等等

自定義註解

自己定義註解的語法也很簡單:

Java 註解

然後就可以使用該註解了。

注意,註解時不可以繼承的,默認繼承Annotation接口。

在Java中有一些特殊的註解,被稱為元註解,簡單說就是可以註解註解的註解,用來標識註解的作用範圍等,有如下元註解:

1.@Retention

Retention是保留的意思,它標註了註解的存活時間,取值如下:

  • RetentionPolicy.SOURCE:註解只在源碼階段保留,在編譯器進行編譯時它將被丟棄忽視。
  • RetentionPolicy.CLASS:註解只被保留到編譯進行的時候,它並不會被加載到 JVM 中。
  • RetentionPolicy.RUNTIME:註解可以保留到程序運行的時候,它會被加載進入到 JVM 中,所以在程序運行時可以獲取到它們。

2.@Documented

Docmented是將註解中的元素包含到Javadoc中

3.@Target

target是目標的意思, 它指明瞭註解運用的地方,如方法、類等,有如下取值:

  • ElementType.ANNOTATION_TYPE: 對註解進行註解
  • ElementType.CONSTRUCTOR:對構造方法進行註解
  • ElementType.FIELD:對屬性進行註解
  • ElementType.LOCAL_VARIABLE:對局部變量進行註解
  • ElementType.METHOD:對方法進行註解
  • ElementType.PACKAGE:對一個包進行註解
  • ElementType.PARAMETER:對一個方法內的參數進行註解
  • ElementType.TYPE:對一個類型進行註解,比如類、接口、枚舉

當有多個時用逗號隔開,如:

@Target(value={ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR})

4.@Inherited

Inherited是繼承的意思,若一個超類被@Inherited註解過的註解進行了註解的話,那麼它的子類如果沒有被任何註解進行註解的話,就會繼承超類的註解。

5.@Repeatable

Repeatable是可重複的意思,就是說這個註解可以進行多次註解,即可以進行多個註解。

Java 註解

以上就是Java中的元註解。

註解屬性:

註解的屬性就是他的成員變量,註解只有成員變量,屬性在註解中以無參的方法形式來聲明,方法名為變量名,返回值為該變量的類型,屬性若沒有默認值需要在使用的時候進行賦值

// int類型的id
int id();
// 字符串類型的msg變量
String msg();
// int類型的id,默認值為-1,即在聲明的可以給該變量賦值,為默認值
int id() default -1;

如以下註解:

Java 註解

同時,若註解中只有一個value屬性,在使用時可以不指定屬性名,如下所示:

Java 註解

若註解中沒有任何屬性,則使用註解時括號可以省略,如下所示:

Java 註解

以上,就是自定義註解的方式

註解的提取

有了自定義的註解,還要去使用它,下面看看註解的提取

在Java中用來描述註解的基類是Annotation

要提取註解就要使用到反射,Class對象的如下方法:

  • isAnnotationPresent(Class extends Annotation>): 驗證Class對象是否應用了某個註解
  • getAnnotation(Class
  • getAnnotations(): 獲取所有註解對象數組,包含從父類繼承的
  • getDeclaredAnnotations():獲取所有註解對象數組,不包含從父類繼承的

註解添加如下:

Java 註解

獲取操作如下所示:

Java 註解

運行結果:

Java 註解

需要注意的是,若一個註解需要在運行時被提取,那麼@Retention(RetentionPolicy.RUNTIME)是必須的。

以上就是註解的定義與提取

Java預置的註解

  1. @Deprecated:標記過時的方法
  2. @Override:標記重寫父類的方法
  3. @SuppressWarnings:阻止警告
  4. @FunctionallInterface:函數式接口註解


分享到:


相關文章: