Java 注解
注解,代码中的特殊标记,可以在编译、类加载、运行时被读取,并执行相应的处理。
一、什么是注解?
Java 中的注解是代码中的特殊标记,它不影响程序的执行,无论增加、删除注解,代码的执行都不会受到影响。
通过注解,程序开发人员可以在不改变原有逻辑的情况下,在源代码中嵌入补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或部署。
二、基本注解
Java 提供了 4 个基本注解。
1. @Override
用于表示方法进行了重写。
如果被注解的方法并非重写父类方法,则编译器会发出错误警告。
2. @Deprecated
用于表示某个类、方法已过时。
当其它程序使用被注解的类、方法时,编译器将会给出警告,提示该类、方法已过时。
3. @SuppressWarning
用于取消编译器的警告。
该注解将会一直作用到被注解元素的所有子元素。因此,如果希望关闭整个类的编译器警告,可以对类进行注解。
4. @FunctionalInterface
用于声明函数式接口。
编译器将检查被注解的接口,确保该接口内有且仅有一个抽象方法。
三、元注解
JDK 还提供了 6 个元注解,其中 5 个元注解用于修饰注解,@Repeatabl
用于定义重复注解。
1. @Retention
用于指定注解的保留时长。
1 |
|
其中,value 值可以为:
RetentionPolicy.CLASS:默认;注解会保留至 class 文件中,但不可以被 JVM 读取
RetentionPolicy.RUNTIME:注解保留至 class 文件中,可以被 JVM 读取
RetentionPolicy.SOURCE:注解仅保留至源代码中,编译至 class 文件时直接丢弃
2. @Target
用于指定注解能够修饰那些程序单元。
1 |
|
其中,value 值可以为:
- ElementType.ANNOTATION_TYPE:注解可以修饰注解
- ElementType.CONSTRUCTOR:注解可以修饰构造器
- ElementType.FIELD:注解可以修饰成员变量
- ElementType.LOCAL_VARIABLE:注解可以修饰局部变量
- ElementType.METHOD:注解可以修饰方法
- ElementType.PACKAGE:注解可以修饰包
- ElementType.PARAMETER:注解可以修饰参数
- ElementType.TYPE:注解可以修饰类、接口、枚举
3. @Documented
用于指定注解能够被 Javadoc 工具提取成文档。
即被
@Documented
修饰的注解将在 Javadoc 工具生成的文档中保留
4. @Inherited
用于指定注解具有继承性。
某个类被注解,其子类也自动被注解
5. @Repeatable
用于指定注解可以重复注解同一个程序单元。
6. @Native
用 @Native 注解修饰成员变量,表示这个变量可以被本地代码引用,常常被代码生成工具使用。
了解即可。
四、自定义注解
1. 定义注解
1 |
|
2. 成员变量
(1) 定义
在定义注解时,可以定义成员变量,成员变量在注解定义中以”无形参的方法”形式声明。
1 |
|
(2) 使用
一旦在注解中定义了成员变量,且该成员变量没有默认值,使用该注解时就应该为成员变量指定值。
1 |
|
(3) 示例
1 |
|
1 |
|
五、注解信息的获取
通过反射,可以获取注解信息。
六、类型注解
Java8 新特性,允许注解应用在任何地方。
略。
七、通过注解实现工厂模式
参考
疯狂 Java 讲义