base
- Java Annotation, Java 注解
- JDK5.0 开始引入的一种注释机制。
- 注解可以用在类、接口,方法、变量、参数以及包等之上。
- 注解可以设置存在于不同的生命周期中,例如 SOURCE(源码中),CLASS(默认),RUNTIME(运行期中)
- 有内置注解,也有自定义注解
作用
- 作为辅助信息: 可以对程序做出一些解释,如 @Override 注解作用于方法上,表示此方法是重写了父类的方法。
- 被他程序读取: 例如编译器会对被 @Override 注解的方法检测判断方法名和参数等是否与父类相同,否则会编译报错;而且在运行期可以通过反射机制访问某些注解信息。
内置注解
- Java 中有 10 个内置注解
- 6 个注解是作用在代码上的
- 4 个注解是负责注解其他注解,也就是元注解
内置注解
- @Override 重写
- @Deprecated 指这段代码过时了
- @SuppressWarning(“all”) 抑制编译时候的警告信息,需要一个参数
自定义注解
- 使用 @interface 声明自定义注解
- 格式: public @interface 注解名 {定义内容}
- 使用 @interface 时,就自动继承了 java.lang.annotation.Annotation 接口
元注解: 用于自定义注解
- @Target 描述注解使用范围
- @Retention 描述注解生命周期 SOURCE(源码中标记了运行时才有效果) < CLASS < RUNTIME
- @Document 描述注解是否被抽取到api文档中。
- @Inherited 说明子类可以继承父类中的该注解
@target中ElementType取值
- ElementType.TYPE,可以作用于类上
- ElementType.METHOD,可以作用于方法上
- ElementType.FIELD,可以作用在成员变量上
// 【2. 使用自定义注解】
class Person{
@MyAnno(name="lcg",id = 1,schools = {"bjtu","cn"})
public void say(){
}
}
// 【1. 定义自定义注解】
//target,指明注解的作用域(此处指明的是在类和方法上起作用)
@Target(value = {ElementType.METHOD,ElementType.TYPE})
//retention 声明该注解在何时起作用(此处指明的是在运行时起作用)
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno{
//注解中需声明参数,格式为:参数类型 + 参数名();
String name() default "xixi";
int id() default -1;
String[] schools();
}