Java中內置註釋詳解

一、 Java 註釋( Annotation :

1 @Override 註釋

該註釋僅應用於方法,用來指明被其註釋的方法必須重寫超類中的方法,否則會發生編譯錯誤。

2 @Deprecated 註釋

該註釋用於聲明元素已經過時,不鼓勵使用。如果堅持使用,可能會帶來潛在問題。如下例子:

import java.util.ArrayList;
    import java.util.List;

public class AnnoSamp1 {
     @Deprecated
     public void method1(){}
     public List method2(){
     List list = new ArrayList();
     list.add("007");
     return list;
     }
}

注:此處程序代碼見相冊中,有實際運行情況!
    方法 method1() 已經被註釋爲過時方法,所以如果由另外一個程序調用了 AnnoSamp1 ()類的 method1() 方法,編譯時會提示過時。

3 @SuppressWarnins 註釋

   SuppressWarnins 註釋允許開發人員控制編譯器警告的發佈,例如泛型使所有的類型安全操作成爲可能,如果沒有使用泛型而存在類型安全問題,編譯器將會拋出警告。 SuppressWarnins 使用格式爲:

@SuppressWarnins( 參數名 )

參數表如下:

1 deprecated: 過時的類或方法

2 finally:finally 子句無法正常完成

3 fallthrough:switch 程序塊中沒有使用 break

4 serial: 類缺少 serialVersionUID

5 unchecked: 未經檢查的類型轉換

6 unused: 定義了但從未使用

7 all: 以上全部情況

4 @Target 註釋

   Target 註釋用來限制註釋的使用範圍,其使用格式是:

@Target({ 應用類型 1 ,應用類型 2 …….})

其中應用類型如下:

1 TYPE :類、接口、註釋或枚舉類型

2 FIELD :屬性,包括枚舉常量

3 METHOD :方法

4 PARAMETER :參數

5 CONSTRUCTOR :構造方法

6 LOCAL_VARIABLE :局部變量

7 ANNOTATION_TYPE :註釋類

8 PACKAGE :包

二、自定義註釋

可以爲自己創建的註釋類提供成員,例如:

Public @interface InTesting{

String value();

}

這是隻有一個成員的註釋(單成員註釋),可以這樣來使用它:

@InTesting(“This method returns all department info”)

Public void getMsg(){….}

由更簡便的使用方法:

@InTesting(“This method returns all department info”)

Public void getMsg(){…}

當然,註釋不只是單成員這麼簡單,可以更爲複雜些,例如:

Public @interface InTesting{

String author();

String description() default “Testing”;

float ver();

}

三、保留策略

Java 提供了 3 種保留策略:

1 RetentionPolicy.CLASS: 編譯後保留在 class 文件中,運行時忽略。

2 RetentionPolicy.RUNTIME: 編譯後保留在 class 文件中,運行時 Java 虛擬機可讀取。

3 RetentionPolicy.SOURCE: 只存在於源文件中,編譯後保留在 class 文件中 .

例如:

import java.lang.annotion.Target;

import java.lang.annotion.ElementType.METHOD;

import java.lang.annotion.Retention;

import java.lang.annotion.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)

@Target({METHOD})

public @interface InTesting{

String author();

   String description() default "Testing";

   float ver ();

}

四、讀取註釋

Java java.lang.reflect 包中提供了 getAnnotations() 方法,以數組的形式返回註釋信息。該方法可用於類、方法、構造方法等類型的對象中。示例如下:

首先來編寫一個簡單的類 Message ,該類的兩個方法均被註釋:

public class Message{

    @InTesting(author = "cg ",description = " 獲取備註信息 ",ver = 1.1f)

    public void getMsg(){

    System.out.println("get message info....");

    }

@InTesting(author = "cg ",description = " 計算利潤率,測試中 ",ver = 1.2f)

    public void calcProfitRat(){

     System.out.println("Calculate...");

    }

}

接下來編寫一個打印輸入 Message 類所有方法註釋信息的程序:

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

public class ReadAnno{

     public static void main(String[] args ) throws SecurityException,NoSuchMethodException{

         Class<Message> c = Message.class;// 獲得 Message 類的實例

          Method[] m = c.getMethods(); // 獲取該類的全部方法

         Annotation[] annotations;// 聲明註釋變量

          for(Method method:m){

          annotations = method.getAnnotations(); // 獲得當前方法的註釋信息

          System.out.println(annotation);

          }

     }

}

程序運行後輸出結果如下:

       @ cn.edu.sinomacro.coursemanag .InTesting(description= 獲取備註信息 ,author=cg ,ver =1.1)

@cn.edu.sinomacro.coursemanag.InTesting(description= 計算利潤率,測試中 ,author=cg ,ver =1.2)

注意: cn.edu.sinomacro.coursemanag 是自定義的包名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章