Java的注解

Java的注解

  • 注解其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用注解,可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。
  • 注解的分类
    • 内部没有定义配置参数的注解-->标记
    • 内部定义配置参数的注解-->元数据

文档注解

  • 文档注解就是文档注释中使用的注解,配合javadoc工具生成API中生成特殊信息
  • java中的文档注解与使用方法如下:
标签 描述 示例
@author 标识一个类的作者 @author description
@deprecated 指名一个过期的类或成员 @deprecated description
指明当前文档根目录的路径 Directory Path
@exception 标志一个类抛出的异常 @exception exception-name explanation
从直接父类继承的注释 Inherits a comment from the immediate surperclass.
插入一个到另一个主题的链接
插入一个到另一个主题的链接,但是该链接显示纯文本字体 Inserts an in-line link to another topic.
@param 说明一个方法的参数 @param parameter-name explanation
@return 说明返回值类型 @return explanation
@see 指定一个到另一个主题的链接 @see anchor
@serial 说明一个序列化属性 @serial description
@serialData 说明通过writeObject( ) 和 writeExternal( )方法写的数据 @serialData description
@serialField 说明一个ObjectStreamField组件 @serialField name type description
@since 标记当引入一个特定的变化时 @since release
@throws 和 @exception标签一样. The @throws tag has the same meaning as the @exception tag.
显示常量的值,该常量必须是static属性。 Displays the value of a constant, which must be a static field.
@version 指定类的版本 @version info

JDK内置的3个注解

@Override

  • @Override表示被标记的方法是重写父类的方法
  • 只能修饰方法
public class Student extends Person{
    /*
    @Override注解表示下面的方法是重写父类的方法,如果不是重写的话,会提示错误
    */
    @Override
    public void eat(){
        System.out.println("子类的eat方法");
    }
}

@Deprecated

  • @Deprecated表示被标记的对象是已经过时的东西
  • 可以修饰类、方法、构造器、属性
public class Student extends Person {
    /*
    @Deprecated注解表示下面的方法是过期方法,可以修饰类、方法、构造器、属性
     */
    @Deprecated
    public void study(){
        System.out.println("过时的study方法");
    }
}

@SuppressWarnings

  • @SuppressWarnings表示抑制被标记对象的编译器警告
public class Test02 {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        /*
        这里int age 被@SuppressWarnings修饰,所以就算后面age没有使用,也不会有编译器警告,否则,就会想num一样,有编译器警告。
        */
        @SuppressWarnings("unused")
        int age = 10;
        
        int num = 20;

        @SuppressWarnings({"unused","rwatypes"})
        ArrayList al = new ArrayList();
    }
}

元注解

  • 元注解是用于修饰其他注解的注解
  • 元注解共有四种:Retention, Target, Documented, Inherited

Retention

  • Retention修饰注解来限定注解的生命周期,@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用@Rentention时必须为该value成员变量指定值
  • 如果注解没有特别加Retention修饰的话,其实默认是用@Retention(etentionPolicy.CLASS)修饰
  • Retention的成员变量
    • RetentionPolicy.SOURCE:在源文件中有效(即源文件保留)
      • 编译器直接丢弃这种策略的注释,在.class文件中不会保留注解信息
    • RetentionPolicy.CLASS:在class文件中有效(即class保留)
      • 保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解。
    • RetentionPolicy.RUNTIME:在运行时有效(即运行时保留)
      • 当运行 Java程序时,JVM会保留注释,加载在内存中了,那么程序可以通过反射获取该注释

Target

  • Target元注解修饰来指定注解的使用范围,用于指定被修饰的注解能用于修饰哪些程序元素;@Target也包含一个名为value的成员变量
  • Target的成员变量
    • TYPE 表示注解可以修饰 类、接口(包括注释类型)或枚举声明
    • FIELD 表示注解可以字段声明(包括枚举常量)
    • METHOD 表示注解可以修饰方法
    • PARAMETER 表示注解可以修饰参数
    • CONSTRUCTOR 表示注解可以修饰构造器
    • LOCAL_VARIABLE 表示注解可以修饰局部变量
    • ANNOTATION_TYPE 表示注解可以注释类型声明
    • PACKAGE 表示注解可以修饰包

Documented

  • 用于指定被该元注解修饰的注解类将被javadoc工具提取成文档。默认情况下,javadoc是 不包括注解的,但是加上了这个注解生成的文档中就会带着注解了

Inherited

  • 被它修饰的Annotation将具有继承性。如果某个类使用了被@Inherited修饰的Annotation,则其子类将自动具有该注解;
posted @ 2020-12-29 16:38  殃奕  阅读(118)  评论(0)    收藏  举报