能够添加到 Java 源代码的语法元数据。类、方法、变量、参数、包都可以被注解,可用来将信息元数据与程序元素进行关联。Annotation 中文常译为“注解”。
@Overwrite:限定重写父类方法,该你注解只能运用于方法
@Deprecated:用于表示某个程序元素(类,方法等)已过时
@SuppressWarnings:抑制编译器警告
@interface来声明一个注解
自定义注解的过程就像在定义一个接口一样,注解中是可以增加属性,为一个注解增加属性就像在为一个接口定义方法
注解的属性需要在使用注解是进行赋值,赋值的方式(属性名=属性值,属性名=属性值)
使用default关键字可以在定义注解时给属性赋予一个默认值如果注解中只有一个属性需要被复制,并且这个属性的名字叫做value,则在赋值时可以省去value=
int version() default 1;
注解的属性必须是 基本数据类型 String Class 枚举 其他注解 以上数据类型的一维数组
所谓的元注解是sun公司定义的用来修饰注解声明的注解:
只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留的域, @Retention 包含一个 RetentionPolicy 类型的成员变量, 通过这个变量指定域。
指定注解用于修饰类的哪个成员. @Target 包含了一个名为 value,类型为ElementType的成员变量。
用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.
被它修饰的 Annotation 将具有继承性.如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解,默认为false
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface MethodInfo {
String author() default "trinea@gmail.com";
String date();
int version() default 1;
}
利用反射技术,反射出 类 方法 成员变量 局部变量....位置上的注解,根据是否有注解和注解上属性的值来控制程序的运行
jdk中提供了AnnotatedElement接口,提供了反射注解的方法而Class, Constructor, Field, Method, Package 都实现过这个接口,所以这些类具有这个接口中定义的方法:
//获取该Target的某个注解,因为一个Target可以被多个Annotation修饰,Target可以是类、方法、变量、参数、包
<T extends Annotation> T getAnnotation(Class<T> annotationClass)
//获取所有注解组成的集合
Annotation[] getAnnotations()
//判断是否有注解
boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
反射注解后,可以获取注解上的属性,获取属性的过程就像在调用方法一样
注意:只有保留在RUNTIME域的注解才能反射
原文:https://www.cnblogs.com/tangyang1318761108/p/10549103.html