注解详解

本文详细介绍了Java注解的基本概念,包括注解的定义、作用,以及与之相关的Annotation、Target和Retention类。此外,还讲解了元注解如@Target、@Retention的作用,并列举了Java内置注解和自定义注解的使用场景。通过阅读,读者将深入理解Java注解的使用和重要性。

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运行期,运行时保留,包含源码期、编译期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值