JavaSE : 注解 Annotation

注解

Java中的注解(Annotation)是一种元数据形式,用于向编译器或JVM提供有关程序元素(如类、方法、变量、参数和包)的附加信息。注解不会直接影响程序的行为或结构,但它们可以被编译器、开发工具或运行时环境用于生成代码、进行验证、执行处理或提供信息。以下是关于Java注解的几个关键点:

1. 注解的种类

1.1.内置标准注解

  • @Override:指示一个方法覆盖了超类中的方法。
  • @Deprecated:标记已过时的元素,建议不再使用。
  • @SuppressWarnings:抑制编译器警告。

1.2.元注解:给注解用的注解

用于创建自定义注解的注解,包括:

1.2.1.@Retention

指定注解保留策略(解析时间),如RetentionPolicy.SOURCE(只保留在源码中)、RetentionPolicy.CLASS(保留在class文件中)或RetentionPolicy.RUNTIME(运行时可通过反射访问)。

1.2.1.1. SOURCE : 编译时(Compile Time)

编译时解析的注解在源代码被编译成字节码时被处理。这些注解主要用于生成额外的代码、检查代码的正确性或进行其他静态分析。例如,@Override, @Deprecated, 和一些编译器使用的注解如Lombok的@Data就是在编译时期被解析的。编译器或注解处理器(如APT, Annotation Processing Tool)会读取这些注解并据此执行相应的操作。

1.2.1.2.CLASS : 类加载时(Class Load Time)

这类注解在类被加载到Java虚拟机(JVM)时被解析。例如,一些框架或库会在类加载阶段利用这些注解来配置类的行为,如Spring框架使用@Component, @Service, @Autowired等注解来实现依赖注入和bean的装配,这些注解会在应用上下文初始化,即类加载时被解析和处理。

1.2.1.3.RUNTIME : 运行时(Runtime)

运行时解析的注解在应用程序运行过程中可以被读取和处理。这意味着注解信息在程序执行期间始终可用,可以通过反射API来访问这些注解。例如,@Retention(RetentionPolicy.RUNTIME)注解的那些注解可以在程序运行时通过反射被检测到,常用于自定义注解处理、日志记录、权限控制等场景。

1.2.2.@Target

指定注解可以应用到哪些程序元素上。

它接受一个ElementType类型的枚举值数组作为参数,ElementType枚举定义了一系列可能的目标元素类型。以下是ElementType的一些主要选项:

  1. ElementType.TYPE: 类、接口(包括注解类型)或枚举声明。
  2. ElementType.FIELD: 类或接口中的字段声明(包括枚举常量)。
  3. ElementType.METHOD: 类或接口中的方法声明。
  4. ElementType.PARAMETER: 方法参数声明。
  5. ElementType.CONSTRUCTOR: 类的构造函数声明。
  6. ElementType.LOCAL_VARIABLE: 本地变量声明。
  7. ElementType.ANNOTATION_TYPE: 另一个注解的声明。
  8. ElementType.PACKAGE: 包声明。
  9. ElementType.TYPE_PARAMETER: 类型参数声明(Java 8及以后版本)。
  10. ElementType.TYPE_USE: 任何类型使用的地方,如泛型参数、类型转换、静态成员的类型等(Java 8及以后版本)。

1.2.3.@Documented

指示该注解应被包含在生成的API文档中。

1.2.4.@Inherited

允许子类继承父类上的注解。

1.2.5.@Repeatable

自Java 8起,允许同一注解在同一声明上多次使用。

1.3.自定义注解

开发者可以定义自己的注解,通过@interface关键字实现,用于满足特定的编程需求或框架集成。

public @interface MyAnnotation {
   

}

1.3.1.注解的参数

定义注解参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值