• 注解的使用


    注解是JDK1.5有的

    应用注解,进行开发和应用:

    注解相当于一个特殊的类哦!

       

    首先定义一个注解的类  @interface toov5

    然后应用这个注解 @A

    然后对这个类进行反射调用

    一个注解的生命周期有三个阶段:

    1、  RetentionPolicy.RUNTIME

    2 、 RetentionPolicy.SOURCE

    3、   RetentionPolicy.CLASS

    分别对应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! 略

      

  • 相关阅读:
    To do list
    Spring Boot学习总结(4)——使用Springloaded进行热部署
    App后台开发运维和架构实践学习总结(2)——RESTful API设计技巧
    程序员如何成为编程高手并以此创业
    小米宋强:生态化大数据平台的深度应用实践
    Tomcat学习总结(9)——Apache Tomcat 8新特性
    Mysql学习总结(41)——MySql数据库基本语句再体会
    Git学习总结(13)——使用git.oschina作为自己的源代码在线管理库
    将学习养成习惯
    Java基础学习总结(71)——深入理解Java虚拟机内存
  • 原文地址:https://www.cnblogs.com/toov5/p/10836110.html
Copyright © 2020-2023  润新知