java自定义注解必须用@interface声明,继承annotation接口;需搭配@target(指定作用位置)和@retention(指定生命周期,runtime才可反射读取);属性须为特定类型、有默认值,value()可省略名称。

Java中自定义注解的核心语法结构很明确:用 @interface 声明注解类型,配合元注解控制作用范围和生命周期,再定义带默认值的属性方法。
必须使用 @interface 关键字
注解本质是特殊接口,但不能用 interface,必须写成 @interface。编译器据此识别为注解类型,并自动让它继承 java.lang.annotation.Annotation。
- 名称需符合Java标识符规范,通常首字母大写,如
@Log、@Validate - 内部不能有方法体,所有成员都是无参、带返回值的抽象方法
必须搭配元注解(尤其是 @Target 和 @Retention)
没有元注解的注解无法正常使用。最常用的是:
-
@Target:指定能用在哪儿,比如
@Target(ElementType.METHOD)表示只能加在方法上;也可多选:@Target({ElementType.TYPE, ElementType.FIELD}) -
@Retention:决定注解存活时间,运行时反射读取必须用
@Retention(RetentionPolicy.RUNTIME);若只做编译检查,可用SOURCE或CLASS
注解属性定义有明确规则
属性声明形如 String value() default "default";,注意:
- 返回类型仅限:基本类型、
String、Class、枚举、其他注解,以及它们的一维数组 -
value()是特殊属性,使用时若只传这一个值,可省略名字,直接写@MyAnno("hello") - 每个属性必须有默认值(
default),否则使用时必须显式赋值
可选但实用的元注解
增强注解语义或工具支持:
- @Documented:让注解出现在生成的 JavaDoc 中
- @Inherited:子类可继承父类上的该注解(仅对类生效,不适用于方法或字段)
- @Repeatable:允许同一位置重复使用该注解(需额外定义容器注解)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











