java中的註解詳解和自定義註解

1、java中的註解詳解java

  一、什麼是註解架構

    用一個詞就能夠描述註解,那就是元數據,即一種描述數據的數據。因此,能夠說註解就是源代碼的元數據。好比,下面這段代碼:編輯器

@Override
public String toString() {
    return "This is String Representation of current object.";
}

    上面的代碼中,我重寫了toString()方法並使用了@Override註解。可是,即便我不使用@Override註解標記代碼,程序也可以正常執行。那麼,該註解表示什麼?這麼寫有什麼好處嗎?事實                上,@Override告訴編譯器這個方法是一個重寫方法(描述方法的元數據),若是父類中不存在該方法,編譯器便會報錯,提示該方法沒有重寫父類中的方法。若是我不當心拼寫錯誤,例如將toString()寫成           了 toStrring(){double r},並且我也沒有使用@Override註解,那程序依然能編譯運行。但運行結果會和我指望的大不相同。如今咱們瞭解了什麼是註解,而且使用註解有助於閱讀程序。ide

    Annotation是一種應用於類、方法、參數、變量、構造器及包聲明中的特殊修飾符。它是一種由JSR-175標準選擇用來描述元數據的一種工具。工具

  二、爲何要使用註解測試

    使用Annotation以前(甚至在使用以後),XML被普遍的應用於描述元數據。不知什麼時候開始一些應用開發人員和架構師發現XML的維護愈來愈糟糕了。他們但願使用一些和代碼緊耦合的東西,而不是像          XML那樣和代碼是鬆耦合的(在某些狀況下甚至是徹底分離的)代碼描述。this

              假如你想爲應用設置不少的常量或參數,這種狀況下,XML是一個很好的選擇,由於它不會同特定的代碼相連。若是你想把某個方法聲明爲服務,那麼使用Annotation會更好一些,由於這種狀況下需        要註解和方法緊密耦合起來,開發人員也必須認識到這點。spa

             另外一個很重要的因素是Annotation定義了一種標準的描述元數據的方式。在這以前,開發人員一般使用他們本身的方式定義元數據。例如,使用標記interfaces,註釋,transient關鍵字等等。每一個程序          員按照本身的方式定義元數據,而不像Annotation這種標準的方式。code

  三、註解的基本語法blog

    jdk1.5版本內置了三種標準的註解:

    @Override,表示當前的方法定義將覆蓋超類中的方法。

    @Deprecated,使用了註解爲它的元素編譯器將發出警告,由於註解@Deprecated是不同意使用的代碼,被棄用的代碼。

    @SuppressWarnings,關閉不當編輯器警告信息。以下圖所示:

                                                 

 

      J2SE5.0版本在 java.lang.annotation提供了四種元註解,專門註解其餘的註解:

      (1)、@Target:

            表示該註解能夠用於什麼地方,可能的ElementType參數有:
            CONSTRUCTOR:構造器的聲明
            FIELD:域聲明(包括enum實例)
            LOCAL_VARIABLE:局部變量聲明
            METHOD:方法聲明
            PACKAGE:包聲明
            PARAMETER:參數聲明
            TYPE:類、接口(包括註解類型)或enum聲明

       (2)、@Retention:

            表示須要在什麼級別保存該註解信息。可選的RetentionPolicy參數包括:
            SOURCE:註解將被編譯器丟棄
            CLASS:註解在class文件中可用,但會被VM丟棄
            RUNTIME:VM將在運行期間保留註解,所以能夠經過反射機制讀取註解的信息

      (3)、@Document:  將註解包含在Javadoc中

      (4)、@Inherited:     容許子類繼承父類中的註解

2、自定義註解

  一、利用元註解定義本身的註解

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ReqValue {
    String values() default "";
}

  這裏,咱們定義了一個註解,其中有一個屬性,從元註解可看出此註解做用於屬性。

  二、定義一個類,並利用此註解

public class User {

    @ReqValue(values = "張三")
    private String userName;

    @ReqValue(values = "123")
    private String password;

    public String getUserName() {

        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

  在這裏,咱們在User的屬性上利用自定義的註解爲其賦值。而這個值怎麼獲取到呢,下面第三步

  三、咱們寫一個測試方法

@Test
    public void reqValueTest() {
        Class<User> userClass = User.class;
        //得到User類的全部屬性信息
        Field[] fields = userClass.getDeclaredFields();
        //得到類中全部屬性的註解信息
        for (Field field : fields) {
            if (field.isAnnotationPresent(ReqValue.class)) { // 若是屬性中包含ReqValue註解
                ReqValue reqValue = field.getAnnotation(ReqValue.class);// 獲取屬性中的ReqValue註解
                System.out.println(field.getName() + "值爲:" + reqValue.values());// 取值
            }
        }
    }

  結合反射,即可以輕易的獲得註解的內容,從而讓註解生效。

  運行結果:

userName值爲:張三
password值爲:123

 

固然這裏,咱們只是演示一下註解怎麼用,並無發揮出註解的強大功能。小夥伴們能夠根據本身的實際狀況靈活的使用註解。

以上就是關於java中註解的簡單介紹,但願能給讀到的每一個人提供幫助,若有有紕漏,歡迎指正。

相關文章
相關標籤/搜索