[2021.02.23][Java语言学习]注解

1. 注解的作用

注解有三个作用,分别体现在三个阶段。

  • 第一个阶段是编译阶段,注解可以给编译器提供信息,根据这些信息,编译器可以采取相应的行动,例如检查错误或者取消警告等等。
  • 第二个阶段是编译和部署阶段,在这个过程中,编译器可以根据注解使用反射的手段生成特定的代码。
  • 第三个阶段是运行时,有些注解可以指定在运行时奏效,根据这些注解不同的规则措施等会被应用到程序中。

2. 注解的使用场景

注解的使用场景包括两个:

  • 类,类的成员,变量,方法等等。
  • 类型检测,在定义变量的时候采用注解,可以提供变量有效性合法性的检测,使得程序更加健壮。

3. 注解的定义

注解是一种特殊的接口,与接口定义的形式类似,包括注解名和注解成员,形式如下:

(public) @interface Annotation{
    Type annoMember();
}

在定义注解时,访问控制修饰符只能为public或者package-default

而且注解内的成员只能为特定类型的,包括(参考这篇文章):

  • 所有基本数据类型
  • String
  • Class类型
  • enum类型
  • Annotation类型
  • 以上所有类型的数组形式

4. Java环境中预定义的注解

java.lang包中五个预定义的注解:

注解 使用场景、方法等
@Override 在子类当中对父类中的某个方法进行重写,通过这个注释,编译器可以判断是否确实为方法重写
@SuppressWarning 取消警告,包括两种:unchecked和deprecated,形式为@SuppressWarning("unchecked","deprecation")
@SafeVarargs 用于屏蔽函数当中的参数未检查警告
@Deprecated 用于表明某个变量、方法等等已经不再维护了,在对代码进行@Deprecated注解的时候,需要在/** sth */文档说明中添加@deprecated
@FunctionalInterface 用于表明某个接口作为一个功能性接口而存在,即接口中只存在一个方法声明。

java.lang.annotation包中有六个预定义的注解,这六个注解使用在其他注解之上,用于指定其他注解的特征:

注解 使用场景、方法等
@Documented 用于告知javadoc程序,某个注解要放到自动生成javadoc文件中
@Repeatable 用于指明某个注解是可以重复使用的
@Inherited 如果某个类写携带了使用@Inherited注解的注解,那么这个类的子类也同样会携带
@Retention 一个注解可以体现在不同的阶段,通过@Retention指定某个注解在哪个阶段可以使用,有三个阶段:
· RetentionPolicy.SOURCE
· RetentionPolicy.CLASS
· RetentionPolicy.RUNTIME
@Native 用于表明某个变量可能由native代码调用
@Target 指定注解可以用在程序的哪个片段,包括8中引用场景:
· ElementType.ANNOTATION_TYPE
· ElementType.Field
· ElementType.Method
· ElementType.Class
· ElementType.Package
· ElementType.Constructor
· ElementType.LOCAL_VARIABLE
· ElementType.PARAMETER

5. 类型注解

6. 重复注解

重复注解的形式如下:

@Repeatable
public @interface SomeInterfaces{
    SomeInterface[] value();
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容