天天看點

java中的内置注解Annotation

背景知識:

       從JDK5開始提供名為Annotation(注釋)的功能,它被定義為JSR-175規範。注釋是以“@注釋名”在代碼中存在的,還可以添加一些參數值,例如:@SuppressWarnings(value="unchecked")。注釋可以附加在package, class, method, field等上面,相當于給它們添加了額外的輔助資訊,我們可以通過反射機制程式設計實作對這些中繼資料的通路。如果沒有外部解析工具等對其加以解析和處理的情況,本身不會對Java的源代碼或class檔案等産生任何影響,也不會對它們的執行産生任何影響。

     中繼資料的作用,大緻可分為三種:編寫文檔,通過代碼裡辨別的中繼資料生成文檔;代碼分析,通過代碼裡辨別的中繼資料對代碼進行分析;編譯檢查,通過代碼裡辨別的中繼資料讓編譯器能實作基本的編譯檢查。

JDK5内置的基本注釋

    JDK5内置了一些常用的注釋,可以在編譯時幫我們捕獲部分編譯錯誤,及提示資訊,下面介紹下這些注釋的用法:

1、@Override定義在java.lang.Override中,此注釋隻适用于修辭方法,表示一個方法聲明打算重寫超類中的另一個方法聲明。如果方法利用此注釋類型進行注解但沒有重寫超類方法,則編譯器會生成一條錯誤消息。例如我們為某類重寫toString()方法卻寫成了tostring(),并且我們為該方法添加了@Override注釋;代碼如下:

public class OverrideDemo {

    @Override

    public String tostring() {

        return super.toString();

    }

}

在編譯時,會提示以下錯誤資訊:

OverrideTest.java:4: 方法未覆寫其父類的方法 

          @Override

         ^1 錯誤

2、@Deprecated定義在java.lang.Deprecated中,此注釋可用于修辭方法、屬性、類,表示不鼓勵程式員使用這樣的元素,通常是因為它很危險或存在更好的選擇。在使用不被贊成的程式元素或在不被贊成的代碼中執行重寫時,編譯器會發出警告。使用@Deprecated的示例代碼如下:

public class DeprecatedDemo {

    public static void main(String[] args) {

         DeprecatedClass.DeprecatedMethod();

class DeprecatedClass {

    @Deprecated

    public static void DeprecatedMethod() {

    }

在編譯時,會得到以下提示資訊:

注意:DeprecatedDemo.java 使用或覆寫了已過時的 API。

注意:要了解詳細資訊,請使用 -Xlint:deprecation 重新編譯。

要注意@Deprecated與@deprecated的差別,@deprecated是為了生成文檔的需要,例如:

@Deprecated

3、@SuppressWarnings定義在java.lang.SuppressWarnings中,用來抑制編譯時的警告資訊。與前兩個注釋有所不同,你需要添加一個參數才能正确使用,這些參數值都是已經定義好了的,我們選擇性的使用就好了,參數如下:

<a href="http://blog.photo.sina.com.cn/showpic.html#url=http://s11.sinaimg.cn/orignal/67aaf444gbc246f4b6f8a" target="_blank"></a>

通過上面的表格,你應該了解到每個參數的用意了,下面我就以一個常用的參數unchecked為例,為你展示如何使用@SuppressWarnings注釋,示例代碼如下:

import java.util.List;

import java.util.ArrayList;

public class SuppressWarningsDemo {

        public static List cache = new ArrayList();

        public void add(String data) {

            cache.add(data);

        }

當我們不使用@SuppressWarnings注釋時,編譯器就會有如下提示:

引用

注意:SuppressWarningsDemo.java 使用了未經檢查或不安全的操作。

注意:要了解詳細資訊,請使用 -Xlint:unchecked 重新編譯。

另外,由于@SuppressWarnings注釋隻有一個參數,并且參數名為value,是以我們可以将上面一句注釋簡寫為

@SuppressWarnings("unchecked")。

同時參數value可以取多個值如:

@SuppressWarnings(value={"unchecked", "deprecation"})

或@SuppressWarnings({"unchecked", "deprecation"})。