注解

概念

注释:用文字描述程序的。给程序员看的。

注解:说明程序的,是给计算机看的。

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、美剧是在同一个层次的。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

概念描述:

JDK1.5之后的新特性

说明程序的

作用分类:

  1. 编写文档:通过代码里标识的元数据生成文档【生成文档doc文档】
  2. 代码分析:通过代码里标识的元数据对代码进行分析【使用反射】
  3. 编译检查:通过代码里标识的元数据让编译器能够实现基本的编译检查【Override】

JDK内置注解

JDK预定义注解

@Override:检测被该注解标注的方法是否是集成自父类(接口)的

@Deprecated:该注解标注的内容,标识已过时

@SuppressWarnings:压制警告,这个注解是带参数的,一般使用all,压制所有警告。

代码演示:

package day20;

@SuppressWarnings("all")
public class Demo01 {
    @Override
    public String toString(){
        return super.toString();
    }
    
    @Deprecated
    public void show1(){
        //有缺陷的
    }
    
    public void show2(){
        //替代show1的方法
    }
    
    public void demo(){
        show1();
    }
}

自定义注解

格式:

  • 元注解

    • public @interface 注解名称{

      ​ 属性列表;

本质:本质上就是一个接口,该接口默认继承Annotation接口

属性:接口中的抽象方法

  • 要求:
    1. 属性的返回值类型
      • 基本数据类型
      • String
      • 枚举
      • 注解
      • 以上类型的数组
    2. 定义了属性,在使用时需要给属性赋值
      1. 如果定义属性时,使用default关键字给属性初始化值,则使用注解时,可以不进行属性的赋值。
      2. 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
package day20;

public @interface MyAnno {
    public String show();
    //基本数据类型
    int show1();
    //字符串
    String show2();
    //枚举
    Person per();
    //注解
    MyAnno2 anno2();
    //数组
    String[] str();
}

元注解

概念:用于描述注解的注解

需要掌握的元注解:

  • @Target:描述注解能够作用的位置
    • ElementType取值:
      • TYPE:可以作用于类上
      • METHOD:可以作用于方法上
      • FIELD:可以作用于成员变量上
  • @Retention:描述注解被保留的阶段
  • @Documented:描述注解是否被抽取到api文档中
  • @Inherited:描述注解是否是否被子类继承

代码演示:

package day20;


import java.lang.annotation.*;

@Target(value = {ElementType.TYPE})//表示该MyAnno01注解只能作用于类上
@Retention(RetentionPolicy.RUNTIME)//当前被描述的注解会保留到class字节码文件中,并在JVM读取到。
@Documented
@Inherited
public @interface MyAnno01 {

}
原文地址:https://www.cnblogs.com/Xiaoming0/p/14039809.html