注解详解
1. 注解定义
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。注解是元数据的一种形式,提供有关
于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。
注解的主要作用就是起到一个注释的作用,在Java 语言中的类、方法、变量、参数和包等都可以被标注。可以根据注解的作用域以及生命周期等进行自定义的操作。
2. 相关类
1. Annotation.java
源码路径:libcore\ojluni\src\main\java\java\lang\annotation\Annotation.java
说明:java中所有的注解都默认实现了该接口。
// 所有注解默认实现接口
// JDK1.5引入
public interface Annotation {
// 判断一个对象是否等效于该注解
boolean equals(Object obj);
// 返回该注解的hash值
int hashCode();
// 返回该注解的字符串表现形式
String toString();
// 返回该注解的类型
Class<? extends Annotation> annotationType();
}
2. Target.java
源码路径:libcore\ojluni\src\main\java\java\lang\annotation\Target.java
说明:申明注解的作用域,分别可以用作用在哪些地方,比如类、方法、成员变量等。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
3. Retention.java
源码路径:libcore\ojluni\src\main\java\java\lang\annotation\Retention.java
说明:申明注解的生命周期,包含源码期、编译期、运行期。
3. 元注解说明
1. 内置注解
位于java.lang包下,JDK1.5开始支持,有以下三个。
| 名称 | 说明 |
|---|---|
| @Override | 用于检查该方法是否是重写方法。 |
| @Deprecated | 用于标记过时方法。 |
| @SuppressWarnings | 用于指示编译器去忽略注解中声明的警告。 |
2. 其他注解
作用在其他注解的注解,位于java.lang.annotation包下,主要有以下几种。
1. @since 1.5
| 名称 | 说明 |
|---|---|
| @Target | 申明注解的作用域。 |
| @Retention | 申明注解的生命周期。 |
| @Documented | 标记这些注解是否包含在用户文档中。 |
| @Inherited | 标记这个注解是继承于哪个注解类(默认注解并没有继承于任何子类)。 |
2. @since 1.7
| 名称 | 说明 |
|---|---|
| @SafeVarargs | 忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。 |
3. @since 1.8
| 名称 | 说明 |
|---|---|
| @FunctionalInterface | 标识一个匿名函数或函数式接口。 |
| @Repeatable | 标识某注解可以在同一个声明上使用多次。 |
4. 常用元注解详解
1. @Target
**Target说明:**用于申明注解的作用域。如果没有申明该注解,默认所有。
源码路径:libcore\ojluni\src\main\java\java\lang\annotation\Target.java
package java.lang.annotation;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
// 数组参数,说明可以作用在多个地方。
ElementType[] value();
}
ElementType说明
源码路径:libcore\ojluni\src\main\java\java\lang\annotation\ElementType.java
| 参数 | 说明 |
|---|---|
| ElementType.TYPE | 作用域:类、接口、枚举 |
| ElementType.FIELD | 作用域:成员变量 |
| ElementType.METHOD | 作用域:方法 |
| ElementType.CONSTRUCTOR | 作用域:构造参数 |
| ElementType.LOCAL_VARIABLE | 作用域:局部变量 |
2. @Retention
**Retention说明:**申明注解的生命周期。如果没有,默认为源码期。
源码路径:libcore\ojluni\src\main\java\java\lang\annotation\Retention.java
package java.lang.annotation;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}
RetentionPolicy说明
源码路径:libcore\ojluni\src\main\java\java\lang\annotation\RetentionPolicy.java
| 参数 | 说明 |
|---|---|
| RetentionPolicy.SOURCE | 源码期,仅在编译器可见,编译后不保存。 |
| RetentionPolicy.CLASS | 编译期,编译时保留,包含源码期。 |
| RetentionPolicy.RUNTIME | 运行期,运行时保留,包含源码期、编译期。 |
本文详细介绍了Java注解的基本概念,包括注解的定义、作用,以及与之相关的Annotation、Target和Retention类。此外,还讲解了元注解如@Target、@Retention的作用,并列举了Java内置注解和自定义注解的使用场景。通过阅读,读者将深入理解Java注解的使用和重要性。

2394

被折叠的 条评论
为什么被折叠?



