註解的使用

註解是JDK1.5有的java

應用註解,進行開發和應用:數組

註解至關於一個特殊的類哦!ide

   

首先定義一個註解的類  @interface toov5測試

而後應用這個註解 @Aspa

而後對這個類進行反射調用設計

 

一個註解的生命週期有三個階段:3d

一、  RetentionPolicy.RUNTIMEcode

2 、 RetentionPolicy.SOURCE對象

三、   RetentionPolicy.CLASSblog

分別對應Java源文件   calss文件(經過類加載器調用進內存就沒有了,好比 @Override等)   內存中的字節碼  這三個階段均可以將註解去掉。 設計時候能夠進行聲明

 

 

總結: 註解用在哪一個階段、什麼類型(方法、類、包、註解、構造方法等)上面。   

元註解以及其枚舉屬性值不用記,直接看java.lang.annotation包下面的類

作一個註解:

@Retention(RetentionPolicy.RUNTIME)  //爲註解服務的 元註解  保留到運行期間
//@Target(ElementType.METHOD) //只能放在Method上不能放在類上
@Target( {ElementType.TYPE, ElementType.METHOD}) //數組裏面 類 方法
public @interface toov5 {


}

 

使用它:

@toov5
public class test1 {
    public static void main(String[] args) {
        //玩字節碼,看看有註解沒  註解是否在場
        boolean annotationPresent = test1.class.isAnnotationPresent(toov5.class);
        if (annotationPresent){  //若是有這個註解
            toov5 annotation = test1.class.getAnnotation(toov5.class); //獲得這個對象
            System.out.println(annotation);
        }
    }
}

 

 

註解的屬性至關於一個胸牌,好比實驗中學學生。若是再想細緻的區分,那麼能夠經過這個胸牌再加一個屬性區分。

 @MyAnnotation(color = "red")

 

 

能夠有默認值:

@Retention(RetentionPolicy.RUNTIME)  //爲註解服務的 元註解  保留到運行期間
//@Target(ElementType.METHOD) //只能放在Method上不能放在類上
@Target( {ElementType.TYPE, ElementType.METHOD}) //數組裏面 類 方法
public @interface toov5 {
  String color() default "red";   //抽象的而且是public的  指定一個屬性默認值
  String value();
}

 

測試:

@toov5(value = "test") // 建立這個註解的實例對象時候須要給屬性賦值
public class test1 {
    public static void main(String[] args) {
        //玩字節碼,看看有註解沒  註解是否在場
        boolean annotationPresent = test1.class.isAnnotationPresent(toov5.class);
        if (annotationPresent){  //若是有這個註解
            toov5 annotation = test1.class.getAnnotation(toov5.class); //獲得這個對象
            System.out.println(annotation.color()+"-----"+annotation.value());  //打印這個註解屬性 取值時候仍是以方法調用的形式進行調用
        }
    }
}

 

 

 

 屬性複雜一些的好比 數組類型的:

註解:

@Retention(RetentionPolicy.RUNTIME)  //爲註解服務的 元註解  保留到運行期間
//@Target(ElementType.METHOD) //只能放在Method上不能放在類上
@Target( {ElementType.TYPE, ElementType.METHOD}) //數組裏面 類 方法
public @interface toov5 {
  String color() default "red";   //抽象的而且是public的  指定一個屬性默認值
  String value();
  int[] arrayAttr() default {1,6};
}

使用:

@toov5(value = "test", arrayAttr = {1,3,6}) // 建立這個註解的實例對象時候須要給屬性賦值
public class test1 {
    public static void main(String[] args) {
        //玩字節碼,看看有註解沒  註解是否在場
        boolean annotationPresent = test1.class.isAnnotationPresent(toov5.class);
        if (annotationPresent){  //若是有這個註解
            toov5 annotation = test1.class.getAnnotation(toov5.class); //獲得這個對象
            System.out.println(annotation.color()+"-----"+annotation.value());  //打印這個註解屬性 取值時候仍是以方法調用的形式進行調用
            System.out.println(annotation.arrayAttr().length);
        }
    }
}

結果:

 

屬性的值可使註解的!

 另外寫一個註解:

public @interface toov5Annotation {
    String value();
}

註解中引用這個註解:

@Retention(RetentionPolicy.RUNTIME)  //爲註解服務的 元註解  保留到運行期間
//@Target(ElementType.METHOD) //只能放在Method上不能放在類上
@Target( {ElementType.TYPE, ElementType.METHOD}) //數組裏面 類 方法
public @interface toov5 {
  String color() default "red";   //抽象的而且是public的  指定一個屬性默認值
  String value();
  int[] arrayAttr() default {1,6};
  //返回註解
    toov5Annotation toov5Annotation() default @toov5Annotation("toov5");  //默認值
}

測試:

@toov5(value = "test", arrayAttr = {1,3,6} , toov5Annotation = @toov5Annotation("ttttttest")) // 建立這個註解的實例對象時候須要給屬性賦值
public class test1 {
    public static void main(String[] args) {
        //玩字節碼,看看有註解沒  註解是否在場
        boolean annotationPresent = test1.class.isAnnotationPresent(toov5.class);
        if (annotationPresent){  //若是有這個註解
            toov5 annotation = test1.class.getAnnotation(toov5.class); //獲得這個對象
            System.out.println(annotation.color()+"-----"+annotation.value());  //打印這個註解屬性 取值時候仍是以方法調用的形式進行調用
            System.out.println(annotation.arrayAttr().length);
            System.out.println(annotation.toov5Annotation().value());
        }
    }
}

結果:

 

 

 屬性也但是是枚舉類的!

 略

也能夠是class! 略

相關文章
相關標籤/搜索