【Java 注解】自定义注解 ( 元注解 )(二)

简介: 【Java 注解】自定义注解 ( 元注解 )(二)

被 @Target(ElementType.TYPE) 元注解修饰的 Annotation 注解 , 只能在 类 上进行标注 ;


@Annotation(
        stringValue = "tom",
        enumValue = Number.ONE,
        annotationValue = @Annotation2,
        stringArrayValue = {"tom", "jerry"})
public class Student {
}



Target 注解中 , ElementType[] value() 注解属性的类型是数组类型 , 说明可以设置多个 注解 标注 位置 ;


如 : 使用如下


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


元注解修饰 Annotation 注解 , 则可以同时在 类 , 字段 和 方法上使用该 Annotation 注解 ;






四、@Retention 元注解


@Retention 注解用于说明该注解需要保留到什么阶段 ;


Java 代码的三个阶段分别是 : 源代码阶段 , 类对象阶段 , 运行时阶段 ;


查看 Retention 源码 ,


@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
    RetentionPolicy value();
}


Retention 注解的 注解属性 RetentionPolicy value() , 其类型是 RetentionPolicy 枚举类型 , 三个枚举值 , 分别对应 Java 代码三大阶段 源代码阶段 , 类对象阶段 , 运行时阶段 ;


public enum RetentionPolicy {
    /** 
     * 源代码阶段
     * 编译器丢弃该注解.
     */
    SOURCE,
    /** 
     * 类对象阶段
     * 注解会被保存到字节码文件中, 不会被 JVM 读取到.
     */
    CLASS,
    /** 
     * 运行时阶段
     * 注解会被保存到字节码文件中, 并会被 JVM 读取到.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}


一般情况下 , 开发则自定义注解 , 都是在运行时进行一些代码分析 , 设置 RetentionPolicy.RUNTIME 注解属性 ;


@Retention(RetentionPolicy.RUNTIME)






五、@Documented 元注解


如果添加了该注解 , 表示当前注解会被抽取到 Java API 文档中 ;


@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}



使用 javadoc Student.java 命令 , 生成 Java 文档 ; 如果使用 @Documented 注解修饰 Annotation 注解 , 则导出的文档如下 , 在类和方法的上面会显示相应注解 ;


image.png


如果不使用 @Documented 注解 , 则生成的文档中没有 Annotation 注解 ;






六、@Documented 元注解


@Inherited : 描述 注解 是否被子类继承 , 如果添加了该注解 , 则子类会自动继承父类的注解 ;


使用 @Inherited 元注解 标注 Annotation 注解 ;


使用 Annotation 注解 标注父类 Person ;


子类 Student 继承 Person 类 , 子类中不添加注解 , 那么父类 Person 中的注解自动添加给子类 Student ;


目录
相关文章
|
2月前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
86 1
|
1月前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
67 7
|
2月前
|
Java
在 Java 中,如何自定义`NumberFormatException`异常
在Java中,自定义`NumberFormatException`异常可以通过继承`IllegalArgumentException`类并重写其构造方法来实现。自定义异常类可以添加额外的错误信息或行为,以便更精确地处理特定的数字格式转换错误。
48 1
|
1月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
101 34
|
1月前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
89 5
|
2月前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
83 14
|
2月前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
48 0
|
Java 数据安全/隐私保护
Java自定义类加载器的编写步骤
Java自定义类加载器的编写步骤
80 0
|
Java 数据库 数据安全/隐私保护
【Java面试】谈谈你对自定义类加载器的理解
【Java面试】谈谈你对自定义类加载器的理解
211 0
|
前端开发 Java