注解
- 标准注解
-
@Override 对覆盖超类中的方法进行标记,如果被标记的方法并没有实际覆盖超类中的方法,则编译器会发出错误警告 @Deprecated 对不鼓励使用或者已过时的方法添加注解 @SuppressWarnings 选择性地取消特定代码段中的警告 @SafeVarargs jdk7新增,用来声明使用了可变长度参数的方法,其在与泛类型一起使用时不会出现类型安全问题
-
- 元注解
- 注解的注解,元注解有以下几种:
-
@Target 注解所修饰的对象范围
- 范围有以下几种
public enum ElementType { ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE, TYPE_PARAMETER, TYPE_USE; }
- 范围有以下几种
-
-
@Inherited 表示注解可以被继承
-
@Documented 表示这个注解应该被JavaDoc工具记录
-
@Retention 用来声明注解的保留策略
有三种策略类型:
public enum RetentionPolicy { CLASS, RUNTIME, SOURCE; private RetentionPolicy() { } }
SOURCE源码级注解,注解信息只会保留在java源码中,源码在编译后,注解信息会被丢弃,不会保留在.class中 CLASS编译时注解。注解信息会保留在.java以及。class中,当运行java程序时,jvm会丢弃该注解信息,不会保留在jvm中 RUNTIME运行时注解。当运行java程序时,jvm也会保留该注解信息可以通过反射获取该注解信息
-
@Repeatable jdk8新增,允许一个注解在同一声明类型(类、属性或方法)上多次使用
- 注解的注解,元注解有以下几种:
- 定义注解
- 基本定义:
public @interface Swordsman { }
- 定义完注解就可以在程序中使用该注解
@Swordsman public class AnnotationTest {
- 定义完注解就可以在程序中使用该注解
- 定义成员变量
public @interface Swordsman { String name(); int age(); }
- 使用该注解时就该该注解的成员变量指定值
@Swordsman(name="张无忌",age=23) public class AnnotationTest { }
- 也可以在定义注解的成员变量时,使用default关键字为其指定默认值
public @interface Swordsman { String name() default "张无忌"; int age() default 12; }
- 因为注解定义了默认值,所以使用时可以不为这些成员变量指定值,而是直接使用默认值
@Swordsman public class AnnotationTest { }
- 因为注解定义了默认值,所以使用时可以不为这些成员变量指定值,而是直接使用默认值
- 使用该注解时就该该注解的成员变量指定值
- 定义运行时注解
@Retention(RetentionPolicy.RUNTIME) public @interface Swordsman { String name() default "张无忌"; int age() default 12; }
- 定义编译时注解
@Retention(RetentionPolicy.CLASS) public @interface Swordsman { String name() default "张无忌"; int age() default 12; }
- 可以用@Rention来设定注解的保留策略,这3个策略的生命周期长度为SOURCE<CLASS<RUNTIME.生命周期短的能起作用的地方,生命周期长的也一定能起作用。一般如果需要再运行时去动态获取注解信息,那只能用RentionPolicy.RUNTIME;r如果要在编译时进行一些预处理操作,比如生成一些辅助代码,就用CLASS;如果只是做一些检查性的操作,比如@Override和SuppressWarnings,则可选用SOURCE,
Dana.Lee
To:Dana_Lee1016@126.com