1.理解注解
1.java 1.5开始,java增加了对元数据的支持也就是注解,可以为程序编译、类加载、运行时被读取,并执行相应的处理。
2.Annotation修饰符可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明。@XXX("name=value"...)
3.注解的继承是相对于类而言的,对于接口时无效的 ;注解只继承父类的类注解,不继承方法注解
4.不影响代码逻辑,只是辅助
5.没有注解解释器,注解就没有意义
6.如图
2.基本注解
@Override :用来指定方法覆载的,它可以强制一个子类必须要覆盖父类的方法。
@Deprecated :用来表示某个程序元素(类、方法等)已过时,当其他程序使用已过时的类、方法时,编译器将会给出警告。
@SuppressWarnings:注解会告知编译器阻止特殊类型的警告信息。@SuppressWarnings("unchecked")
@SafeVarargs【Java7新增】:如果把一个没有定义泛型的集合,赋给一个有定义泛型的集合,会发生堆污染,会报错。@SafeVarargs可以抑制这个报错。
@FunctionalInterface【Java8新增】:用来限制修饰的接口必须是一个函数式接口,不然会报错。
@Repeatable【java8新增】:可重复的注解 元注解
3.元注解
1.元注解:描述注解的注解,java提供了四种元注解,即@Retention、@Target、@Documented、@Inherited、@Repeatable
2.介绍这五中种元注解的使用
@Retention 保留策略(指定一条注解保留多长时间) RetentionPolicy类型取值有三个【source、class、runtime】
@Retention(RetentionPolicy.RUNTIME) public @interface MyTag(){ 定义属性... }
-source: 不包含在类文件(.class文件)中的注解,但存在于源代码中
-class : 包含在类文件中的注解,但JVM不需要将它们载入,默认保留策略
-runtime:包含在类文件中的注解,并由JVM载入,通过反射获取该注释
@Target 限制Annotaion能修饰类中的那些元素 (@Target(ElementType.ANNOTATION_TYPE))
@Target(ElementType.FIELD) public @interface MyTag{ 自定义体 ... }
- ANNOTATION_TYPE : 只能用来修饰Annotaion
- FIELD : 修饰成员变量
- CONSTRUCTOR : 只能用来修饰构造器
- METHOD : 只能用来修饰方法
- LOCAL_VARIABLE : 只能用来修饰局部变量
- PACKAGE : 只能用来修饰包
- PARAMETER : 只能用来修饰参数
- TYPE : 只能用来修饰类、接口(包括注解类型)或枚举定义 相当于类的任何元素
@Documented : 指定Annotaion是否能包含到javadoc生成的文档中。
@Inherited : 指定Annotaion具有继承性,父类定义了这个注解,那么子类也会继承这个注解。
@Repeatable : 可重复注解,表明标识该注解可以多次使用相同的声明或类型使用。
4.自定义注解
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Test { String description() default "描述"; }