注解(Annotation)
作用在代码的注解是
-
@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
-
@Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
-
deprecation:使用了不赞成使用的类或方法时的警告;
unchecked:执行了未检查的转换时的警告,例如当使用集合时没有用泛型 (Generics) 来指定集合保存的类型;
fallthrough:当 Switch 程序块直接通往下一种情况而没有 Break 时的警告;
path:在类路径、源文件路径等中有不存在的路径时的警告;
serial:当在可序列化的类上缺少 serialVersionUID 定义时的警告;
finally:任何 finally 子句不能正常完成时的警告;
all:关于以上所有情况的警告 -
@SuppressWarnings - 指示编译器去忽略注解中声明的警告
元注解(对其他注解进行修饰的注解)是:
-
@Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。不写该注解默认为CLASS
-
-
仅编译期:
RetentionPolicy.SOURCE; -
仅class文件:
RetentionPolicy.CLASS; -
运行期:
RetentionPolicy.RUNTIME。
-
-
@Documented - 标记这些注解是否包含在用户文档中(生成在javadoc中)。
-
@Target - 标记这个注解应该是哪种 Java 成员。当注解未使用此注解修饰时可以应用在任何元素上
//@Target(ElementType.ANNOTATION_TYPE)public enum ElementType {
TYPE,//应用在类,接口(包括注解类型),枚举
FIELD,//应用在字段声明,包括枚举常量
METHOD,//方法声明
PARAMETER,//形参声明
CONSTRUCTOR,//构造函数声明
LOCAL_VARIABLE,//局部变量声明
ANNOTATION_TYPE,//注解类型声明
PACKAGE,//包声明
TYPE_PARAMETER,//类型参数声明
TYPE_USE//类型使用声明
} -
@Inherited -子类汇继承父类中被@Inherited修饰的注解
从 Java 7 开始,额外添加了 3 个注解:
-
@SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
-
@FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
-
@Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。
判断注解是否存在
-
Class.isAnnotationPresent(Class) -
Field.isAnnotationPresent(Class) -
Method.isAnnotationPresent(Class) -
Constructor.isAnnotationPresent(Class)w.class.isAnnotationPresent(Test2.class)//类.isAnnotationPresent(注解)存在true
反射获取注解
-
Class.getAnnotation(Class) -
Field.getAnnotation(Class) -
Method.getAnnotation(Class) -
Constructor.getAnnotation(Class)
Test2 annotation = base.class.getAnnotation(Test2.class);
System.out.println(annotation.value());

浙公网安备 33010602011771号