注解在《java编程思想里》里的定义是:
注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后的某个时刻非常方便地使用这些数据。
java se 内置了三种注解:
@Override
@Deprecated
@SuppressWarnings
还有四种元注解,专门用来负责新创建的注解:
@Target:表示该注解可以用于什么地方
ElementType.CONSTRUCTOR(构造器的声明),
FIELD(域声明),
LOCAL_VARIABLE(局部变量声明),
METHOD(方法声明),
PACKAGE(包声明),
PARAMETER(参数声明),
TYPE(类、接口声明)
@Retention:表示需要在什么级别来保存该注解信息,可选的参数包括:
Retention.SOURCE,编译时刻即丢弃
CLASS,class文件中可用,运行时丢弃
RUNTIME,运行时仍然可用
@Documented
将此注解保存在javadoc里
@Inherited 允许子类继承父类的注解。
来一个简单的例子:
注解类:
@Retention(RUNTIME)
@Target(METHOD)
public @interface Senninha {
//默认值是senninha
String name() default "senninha";
}
处理这个注解的方法:
public class AnnotationTest {
//使用手动设置值为ayrton
@Senninha(name = "ayrton")
public void senninha(){
System.out.println("this is senninha");
}
public static void main(String[] args){
AnnotationTest test = new AnnotationTest();
try {
//通过反射获取方法里是否包含注解,并且获取注解里的方法值。
Method m = test.getClass().getMethod("senninha", null);
Senninha s = m.getAnnotation(Senninha.class);
if(s == null){
System.out.println("don't have annotation");
}else{
System.out.println("have annotation");
//注解里的值变为了我们定义的ayrton
System.out.println(s.name());
}
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}