Java註解之Annotation詳解

---------------------- ASP.Net+Android+IOS開發.Net培訓、期待與您交流! ----------------------

註解相當於一種標記,在程序中加了註解就等於爲程序打上了某種標記,沒加,則等於沒有某種標記,以後,javac編譯器,開發工具和其他程序可以用反射來了解你的類及各種元素上有無何種標記,看你有什麼標記,就去幹相應的事。標記可以加在包,類,字段,方法,方法的參數以及局部變量上。

 Annotation詳解

註解的作用:

1、生成文檔。這是最常見的,也是java 最早提供的註解。常用的有@see @param @return 

2、跟蹤代碼依賴性,實現替代配置文件功能。比較常見的是spring 2.5 開始的基於註解配置。作用就是減少配置。現在的框架基本都使用了這種配置來減少配置文件的數量。以後java的程序開發,最多的也將實現註解配置,具有很大用處;

3、在編譯時進行格式檢查。如@override 放在方法前,如果你這個方法並不是覆蓋了超類方法,則編譯時就能檢查出

建立annotation版本的程序步驟:
1 創建teacher表(也可以用hibernate創建,)
2 創建teacher類
2 在程序中加入annotation的jar包
  >6 測試
7 自動提示:window-Preferences-java-Editor->Conntent Assist

自定義註解及其應用

1)、定義一個最簡單的註解

public @interface MyAnnotation {

//......

}

2)、把註解加在某個類上:

@MyAnnotation

public class AnnotationTest{

//......

}

以下爲模擬案例

自定義註解@MyAnnotation

 

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

 

/**

 * 定義一個註解

 * 

 * 

 * 

 * 

 */

// Java中提供了四種元註解,專門負責註解其他的註解,分別如下

 

// @Retention元註解,表示需要在什麼級別保存該註釋信息(生命週期)。可選的RetentionPoicy參數包括:

// RetentionPolicy.SOURCE: 停留在java源文件,編譯器被丟掉

// RetentionPolicy.CLASS:停留在class文件中,但會被VM丟棄(默認)

// RetentionPolicy.RUNTIME:內存中的字節碼,VM將在運行時也保留註解,因此可以通過反射機制讀取註解的信息

 

// @Target元註解,默認值爲任何元素,表示該註解用於什麼地方。可用的ElementType參數包括

// ElementType.CONSTRUCTOR: 構造器聲明

// ElementType.FIELD: 成員變量、對象、屬性(包括enum實例)

// ElementType.LOCAL_VARIABLE: 局部變量聲明

// ElementType.METHOD: 方法聲明

// ElementType.PACKAGE: 包聲明

// ElementType.PARAMETER: 參數聲明

// ElementType.TYPE: 類、接口(包括註解類型)或enum聲明

 

// @Documented將註解包含在JavaDoc中

 

// @Inheried允許子類繼承父類中的註解

 

@Retention(RetentionPolicy.RUNTIME)

@Target( { ElementType.METHOD, ElementType.TYPE })

public @interface MyAnnotation {

// 爲註解添加屬性

String color();

 

String value() default "我是林計欽"// 爲屬性提供默認值

 

int[] array() default { 1, 2, 3 };

 

Gender gender() default Gender.MAN; // 添加一個枚舉

 

MetaAnnotation metaAnnotation() default @MetaAnnotation(birthday = "我的出身日期爲1990-1-15");

// 添加枚舉屬性

 

}

註解測試類AnnotationTest

package com.yuan.test;

 

 /**

 * 註解測試類

 * 

 * 

 * @author yongyuan

 *

 */

 //調用註解並賦值

 @MyAnnotation(metaAnnotation=@MetaAnnotation(birthday = "我的出身日期爲1990-1-15"),color="red"array={23, 26})

 public class AnnotationTest {

 

    public static void main(String[] args) {

        //檢查類AnnotationTest是否含有@MyAnnotation註解

         if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){

            //若存在就獲取註解

             MyAnnotation annotation=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);

            System.out.println(annotation);

            //獲取註解屬性

             System.out.println(annotation.color()); 

            System.out.println(annotation.value());

            //數組

             int[] arrs=annotation.array();

            for(int arr:arrs){

                System.out.println(arr);

            }

            //枚舉

             Gender gender=annotation.gender();

            System.out.println("性別爲:"+gender);

            //獲取註解屬性

             MetaAnnotation meta=annotation.metaAnnotation();

            System.out.println(meta.birthday());

        }

    }

}

 

註解類MetaAnnotation,模擬註解中添加註解屬性

package com.yuan.test;

 

 /**

 * 定義一個註解,模擬註解中添加註解屬性

 * 

 * @author yongyuan

 *

 */

 public @interface MetaAnnotation {

    String birthday();

}

枚舉類Gender,模擬註解中添加枚舉屬性

package com.yuan.test;

 /**

 * 枚舉,模擬註解中添加枚舉屬性

 * 

 * @author yongyuan

 *

 */

 public enum Gender {

    MAN{

        public String getName(){return "男";}

    },

    WOMEN{

        public String getName(){return "女";}

    }; //記得有“;”

     public abstract String getName();

}

 我的總結:當我們在編寫代碼時,用到一些不建議使用的方法時,就會出現一些黃色的警告,那麼這些警告就是註釋的作業,也不必擔心,程序也能運行。

----------------------茉莉琥珀申請入駐搜狐公衆平臺,特此聲明 ----------------------

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