Java注解(Annotation)
2016/5/19 20:11:18 SeventeenWen
Annotation可以用来修饰包,类,方法,成员变量,参数,局部变量。
我们可以通过反射的方式来获取Annotation的数值,
主要的注解
- @Override
- @Deprecated
- @SuppressWarrnings
@Override
修饰的方法是重写(覆盖)的,用它修饰的方法必须重写(覆盖)父类的方法。@Override对程序没有任何影响,它只是告诉编译器这是一个重写的方法,编译器可以检查这个方法是否重写了父类的方法。而且@Override只能修饰方法。
@Deprecated
过时的。用处不大!
@SuppressWarnings
抑制异常,使用这个注解修饰后,编译器将不会发出警告。
@Retention
用来修饰Annotation,有个RetentionPolicy类型的value,它有三个值
- CLASS:编译器将把注释记录在类文件中,但在运行时 JVM 不需要保留注释(默认属性)。
- RUNTIME:编译器将把注释记录在类文件中,在运行时 VM 将保留注释,因此可以反射性地读取。
- SOURCE:编译器要丢弃的注释。
如果要通过反射获得注解信息,就必须将Retention设置成RUNTIME。
如何自定义Annotation?
使用@interface关键字
public @interface Test(){
}
定义完,我们可以在程序的任何地方使用@Test来使用注解
@Test //我们自己定义的Annotation
public class Demo {
@Test
public void fun(){
}
}
可以用Annotation来修饰任何程序元素,Annotation可以带有成员变量。以方法的形式来定义,非常像接口的定义。
public @interface Test {
String name();
int age();
}
定义了成员变量之后我们就可以在使用Annotation时给成员变量赋值,
@Test //我们自己定义的Annotation
public class Demo {
@Test(name="SeventeenWen",age="22")
public void fun(){
}
}
还可以给Annotation设置默认值
public @interface Test {
String name() ;
int age();
}
如果没有在使用Annotation是赋值,将默认使用默认值。
获取Annotation的值
可以通过反射的方式获取
接口 AnnotatedElement的实现类
- Class
- Method
- Pacage
- Field
- Constructor
方法(Java7):
- getAnnotation < T extends Annotation > T getAnnotation(Class annotationClass):给定类型。
- getAnnotations:返回此元素上存在的所有注解。
- getDeclaredAnnotations:返回直接修饰这个程序的注解。
- booleanisAnnotationPresent(Class<?extendsAnnotation> annotationClass):判断是否有指定的注解存在。