注解是一种特殊的注释。普通注释在编译器时就会被过滤掉,注解不会,它可以提醒编译器对代码进行检查,比如@Override注解。
注解的用途很广泛,并且有很多。在java.lang包下有三个常用的注解:
@Override 标注此方法为重写父类的方法,会通知编译器检测是否重写
@Deprecated 标注此成员是否过时
@SuppressWarnings 内置注解, 作用是抑制警告
自定义注解:
@interface MyAnnotation{
}
这种注解是没有限制的,可以修饰任意位置,比如属性、方法、构造器、形参、包等。可以用元注解来限制自定义注解。
@Target(ElementType.METHOD) // 一旦定义了目标, 注解只能使用在方法上
@Retention(RetentionPolicy.RUNTIME) // 定义注解的停留期, RUNTIME代表运行时, 在 运行时还保留的注解,可以通过反射处理
@interface MyAnnotation { // 带有属性的注解, 在使用时必须给属性传值,如果属性有 缺省值, 可以省略传值
public String name() default "某名字"; // 注解的属性, 写法像方法
public int age();
}
上面代码中的@Targer注解和@Retention注解都是元注解,是用来修饰注解MyAnnotation的。具体作用在注释中已经写到。
并且这个注解是有属性的,第一个属性还还有默认值。有默认值属性的注解在使用时可以不写这个属性。
@MyAnnotation2(age = 50)
@MyAnnotation2(name = "李四", age = 40)
上面这两种使用方法都是正确的,并且只能修饰方法。这个注解的属性可以参与到程序运行当中,因为@Retention元注解的属性为RetentionPolicy.RUNTIME。
by Karl