zoukankan      html  css  js  c++  java
  • Annotation(注解)

    Annotation(注解) 概述:

    • 从JDK 5.0 开始,Java 增加了对元数据(MetaData) 的支持, 也就是Annotation(注解)

    • Annotation其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理. 通过使用Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息.

    • Annotation可以像修饰符一样被使用, 可用于修饰包,类, 构造器, 方法, 成员变量, 参数, 局部变量,的声明, 这些信息被保存在Annotation 的 “name=value”对中.

    • Annotation能被用来为程序元素(类, 方法, 成员变量等) 设置元数据

    (元注解:注解的注解) 

    基本的 Annotation:

    • 使用Annotation 时要在其前面增加 @ 符号, 并把该Annotation 当成一个修饰符使用. 用于修饰它支持的程序元素

    • 三个基本的Annotation:

      • @Override: 限定重写父类方法, 该注释只能用于方法

      • @Deprecated: 用于表示某个程序元素(类, 方法等)已过时

      • @SuppressWarnings: 抑制编译器警告.

    自定义 Annotation:

    • 定义新的Annotation 类型使用 @interface 关键字

    • Annotation的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型.

    • 可以在定义Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用default 关键字

    • 没有成员定义的Annotation 称为标记; 包含成员变量的Annotation 称为元数据 Annotation

    Annotation(注解) 的简单用法:

    创建一个MyAnnotation1:
    public @interface MyAnnotation1 {
      String phone();
    }
    创建一个Student类:

    public enum Student {
      xiaohong,xiaohei,xiaolv;
    }
    创建一个MyAnnotation2:

    public @interface MyAnnotation2 {
      String sex();
      int age();
      double[] score();
      Student stu();
      MyAnnotation1 myAnno();
    }
    调用:

    @MyAnnotation2(sex = "男",age=18,score = {66,58,70},stu = Student.xiaohei,myAnno = @MyAnnotation1(phone = "18632594685"))
    public class Demo1 {
    }

     常用注解:

    1.@Target:注解的作用目标

      @Target(ElementType.TYPE)——接口、类、枚举、注解
      @Target(ElementType.FIELD)——字段、枚举的常量
      @Target(ElementType.METHOD)——方法
      @Target(ElementType.PARAMETER)——方法参数
      @Target(ElementType.CONSTRUCTOR) ——构造函数
      @Target(ElementType.LOCAL_VARIABLE)——局部变量
      @Target(ElementType.ANNOTATION_TYPE)——注解
      @Target(ElementType.PACKAGE)——包

    2.@Retention:注解的保留位置

      RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节码文件中不包含。
      RetentionPolicy.CLASS:这种类型的Annotations编译时被保留,默认的保留策略,在class文件中存在,但JVM将会忽略,运行时无法获得。
      RetentionPolicy.RUNTIME:这种类型的Annotations将被JVM保留,所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用。

    (这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码,且生命周期长度 SOURCE < CLASS < RUNTIME)

    3.@Document:说明该注解将被包含在javadoc
    4.@Inherited:说明子类可以继承父类中的该注解

    心得总结:

    ​   才能一旦让懒惰支配,它就一无可为。

  • 相关阅读:
    JavaScript做定时器
    当前时间到固定日期的天数,如:在页面弹出显示到到2015年5月1日还有多少天
    使用Date日期对象来完成,在页面上根据不同时间显示不同的问候语,如:早上好,中午好,下午好,晚上好等信息
    JavaScript中遍历数组中元素的两种方法
    设计程序,单击【随机数】按钮,使用Math对象的random函数产生一个0-100之间(含0-100)的随机整数,并在对话框中显示,如下图。单击【计算】按钮,计算该随机数的平方、平方根和自然对数,保留两位小数,并在对话框中显示,如下图。
    JavaScript中实现四舍五入后保留小数的方法
    打印函数如何适应不同的打印机
    在MFC中改变控件的TAB顺序
    LPCTSTR —— 摘自百度百科
    vector使用注意事项
  • 原文地址:https://www.cnblogs.com/javacyq/p/13603395.html
Copyright © 2011-2022 走看看