14.Java的注解

一.Java注解

  • 定义:JDK1.5之后引入的新特性,用来说明程序给计算机看的。
  • 作用:编译检查,编写文档,代码分析

1.Java中的内置注解

Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

  • 作用在代码的注释:

    • @Override:检测被该注解标注的方法是否是继承自父类(父接口)的
    • @Deprecated:该注释标注的内容表示已经过时了
    • @SuppressWarnings:压制警告
      • 一般传递参数all:@SuppressWarnings("all") 表示压制所有警告
  • 作用在其他地方注解
    • 元注解:
      • @Retention:标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
      • @Documented:标记这些注解是否包含在用户文档中。
      • @Target:标记这个注解应该是哪种 Java 成员。
      • @Inherited:标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)
    • 从 Java 7 开始,额外添加了 3 个注解:
      • @SafeVarargs:Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
      • @FunctionalInterface:Java 8 开始支持,标识一个匿名函数或函数式接口。
      • @Repeatable:Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

2.自定义注解

  • 基本格式:
    1 元注解
    2 public @interface 注解名称{
    3     属性列表
    4 }
    开头编写元注解,下面编写自己的注解
  • 本质:注解本质就是一个接口,该接口默认继承Annotation接口
    • public interface MyAnno extends java.lang.annotation.Annotation{}
  • 属性:接口中抽象方法
    • 要求:
      • 属性的返回类型
        • 8大基本类型
        • String
        • 枚举
        • 注解
        • 以上类型的数组
      • 使用注解时需要给属性进行赋值
        • 如果定义属性时使用default给属性赋默认值后,使用注解时可以不对属性进行赋值
        • 如果只有一个属性需要赋值,并且属性名为value时,value可以省略,直接给值即可。
        • 数组赋值时,值使用{}包裹,如果数组至于一个值,则{}可以省略

Anno2:

1 public @interface Anno2 {
2     String name();
3 }

MyEnum:

1 public enum MyEnum {
2     type1,type2
3 }

MyAnno:

1 public @interface MyAnno {
2     int age();
3     String name() default "张三";
4     MyEnum type();
5     Anno2 anno2();
6     String[] strs();
7 }

TestAnno:

1 @MyAnno(age = 24, type = MyEnum.type1, anno2 = @Anno2(name = "anno2"), strs = {"s1", "s2"})
2 public class TestAnno {
3 
4 }

元注解:

3,在程序使用(解析)注解

猜你喜欢

转载自www.cnblogs.com/zhihaospace/p/12227723.html