一.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 }
元注解: