切換語言為:簡體

基於 Java 談談「註解」

  • 爱糖宝
  • 2024-05-15
  • 2092
  • 0
  • 0

一、簡介

【概述】

不是程式本身,不能改變程式的執行結果,也不會影響程式執行的效能。可以對程式作出解釋,但是區別於註釋,註解可以寫入引數,透過反射機制來獲取所註解資訊的訪問。

【分類】

根據註解是否包含成員變數,可以分為如下兩類。

分類

說明

標記註解

沒有定義成員變數,這種註解僅利用自身的存在與否來提供資訊

後設資料註解

包含成員變數,因為可以接受更多的後設資料,所以也被稱為後設資料註解。

【常見註解】

註解

作用域

說明

@Override

方法

指定方法重寫,只能修飾方法。

@Deprecated

類、介面、成員方法和成員變數

表示某個元素(類、方法等)已過時

@SuppressWarnings

類、介面、成員方法

取消顯示指定的編譯器警告

@SafeVarargs

可變引數方法

抑制編譯器警告

@FunctionalInterface

介面

指定某個介面必須是函式式介面

二、元註解

用於解釋其他註解,自定義註解時可使用元註解。

1、@Documented

【概述】

標記註解,該註解修飾的註解類會被JavaDoc工具提取成文件。

【示例】

  1. 編寫註解和測試類

@Documented
@Target({ ElementType.TYPE, ElementType.METHOD })
public @interface FxDocumented {
    String name() default "這是@Documented註解";
}

@FxDocumented(name = "fuxing")
public class FuXing {
    /**
     * 測試document
     */
    @FxDocumented(name = "fuxing")
    public String Test() {
        return "CodeUpHub測試@Documented";
    }
}

  1. 開啟Java檔案所在的目錄,分別輸入如下兩條命令列:

javac FuXing.java FxDocumented.java
javadoc -d doc FuXing.java FxDocumented.java
  1. 執行成功後,開啟生成的幫助文件,如下圖

基於 Java 談談「註解」

2、@Target

【概述】

用來指定一個註解的使用範圍,即被@Target修飾的註解可以用在什麼地方。該註解有一個成員變數(value)用來設定適用目標。

【作用域常量】

列舉

說明

CONSTRUCTOR

用於構造方法

FIELD

用於成員變數(包括列舉常量)

LOCAL_VARIABLE

用於區域性變數

METHOD

用於方法

PACKAGE

用於包

PARAMETER

用於型別引數(JDK 1.8新增)

TYPE

用於類、介面(包括註解型別)或enum宣告

【示例】

@Documented
@Target({ ElementType.TYPE, ElementType.METHOD })	//表明該註解作用於類和方法
public @interface FxDocumented {
    String name() default "這是@Documented註解";
}

3、@Retention

【概述】

用於描述註解的生命週期,也就是該註解被保留的時間長短。該註解中的成員變數(value)用來設定作用在哪個時期。

【作用域常量】

生命週期大小排序為 SOURCE < CLASS < RUNTIME

列舉

說明

SOURCE

原始碼有效

CLASS

CLASS類有效

RUNTIME

執行時有效

4、@Inherited

【概述】

標記註解,用來指定該註解可以被繼承。使用該註解的Class類,表示這個註解可以被用於該Class類的子類。就是說如果某個類使用了被@Inherited修飾的註解,則其子類將自動具有該註解。

三、自定義註解

【流程】

  1. 建立註解類Annotation;

  2. 定義成員變數(以方法的形式來定義);

  3. 可以使用default為成員變數指定初始值;

【示例】

@Target({METHOD})
@Inherited
@Retention(RUNTIME)	
public @interface FuXing {
    String name() default "FuXing";
}

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.