jay2home

导航

 

注解

编译约束的标记。

可以标记任何东西,类,方法,字段。

自定义注解

像定义接口一样,但要加一个@

public @interface 注解名{

}
如:定义一个名为Student的注解
public @interface Student {

} 

注解属性

和定义成员变量一样,注意()和默认值

// 姓名
String name();
// 年龄
int age() default 18;
// 爱好
String[] hobby();

特殊属性

value:特殊属性value
* 如果注解中只有一个属性且名字叫value,则在使用该注解时可以直接给该属性赋值,而不需要给出属性名。
* 如果注解中除了value属性之外还有其他属性且只要有一个属性没有默认值,则在给属性赋值时
value属性名也不能省略了。
小结:如果注解中只有一个属性时,一般都会将该属性名命名为value

元注解

注解注解的注解。只有两个:目标@Target 生命周期@Retention

@Target
        * 作用:用来标识注解使用的位置,如果没有使用该注解标识,则自定义的注解可以使用在任意位置。
        * 可使用的值定义在ElementType枚举类中,常用值如下
            TYPE,类,接口
            FIELD, 成员变量
            METHOD, 成员方法
            PARAMETER, 方法参数
            CONSTRUCTOR, 构造方法
            LOCAL_VARIABLE, 局部变量

    * @Retention
        * 作用:用来标识注解的生命周期(有效范围)
        * 可使用的值定义在RetentionPolicy枚举类中,常用值如下
            * SOURCE:注解只作用在源码阶段,生成的字节码文件中不存在
            * CLASS:注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值
            * RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段

解析

注解信息用反射解析,通过class对象的方法,得到各种注解内容。

  什么是注解解析
        * 使用Java技术获得注解上数据的过程则称为注解解析。
    与注解解析相关的接口
        * Annotation: 注解类,该类是所有注解的父类。
        * AnnotatedElement:该接口定义了与注解解析相关的方法
             T getAnnotation(Class<T> annotationClass) 根据注解类型获得对应注解对象
             Annotation[]	getAnnotations()
                * 获得当前对象上使用的所有注解,返回注解数组,包含父类继承的
             Annotation[]	getDeclaredAnnotations()
                * 获得当前对象上使用的所有注解,返回注解数组,只包含本类的
             boolean	isAnnotationPresent(Class<Annotation> annotationClass)
                * 判断当前对象是否使用了指定的注解,如果使用了则返回true,否则false

        获取注解数据的原理
            * 注解作用在哪个成员上就会得该成员对应的对象来获得注解
                * 比如注解作用成员方法,则要获得该成员方法对应的Method对象
                * 比如注解作用在类上,则要该类的Class对象
                * 比如注解作用在成员变量上,则要获得该成员变量对应的Field对象。
            * Field,Method,Constructor,Class等类都是实现了AnnotatedElement接口
posted on 2025-05-06 09:55  Jay404  阅读(10)  评论(0)    收藏  举报