1. 什么是注解
注解是java5引入的新技术
注释:给人看的,程序不能读取
注解:不仅能给人看,程序也能读取。
最常见的注解就是@Override(重写),通过这个注解,程序就知道这个方法是重写的
2. 注解的分类
注解分为三大类
- 内置注解
- 元注解
- 自定义注解
内置注解
内置注解就是jdk自带的注解
- @Override :用来表示重写方法
- @Deprecated:表示该方法已过时
- @SuppressWarnings:告诉程序,忽略警告,@SuppressWarnings(“all”),忽略所有警告
元注解
元注解:用来注解其他的注解,用于对注解的自定义
-
@Target:用来表示其注解的作用范围
例如:@Target(ElementType.METHOD)表示该注解,作用范围为方法级
ElementType.TYPE 应用于类的元素
ElementType.METHOD 应用于方法级
ElementType.FIELD 应用于字段或属性(成员变量)
ElementType.ANNOTATION_TYPE 应用于注解类型
ElementType.CONSTRUCTOR 应用于构造函数
ElementType.LOCAL_VARIABLE 应用于局部变量
ElementType.PACKAGE 应用于包声明
ElementType.PARAMETER 应用于方法的参数 -
@Retention:表示该注解的生命周期
例如:@Retention(RetentionPolicy.RUNTIME)表示该注解,生命周期持续到运行时
SOURCE 在源文件中有效(即源文件保留)
CLASS 在class文件中有效(即class保留)
RUNTIME 在运行时有效(即运行时保留)
-
@Inherited :允许子注解继承
自定义注解
格式:
@interface 注解名字{内容}
最简单的注解
@interface MyAnnotation{
}
还可以添加元注解,生命其作用范围和生命周期
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
}
表示该注解只能用在方法和类上,且生命周期是runtime
如图,该注解只能用在类和方法上
我们可以,在@Target上再加一个ElementType.FIELD,就能作用在属性上了
直接还能设置参数
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
String value();
}
表示使用该注解必须传入参数
还能设置默认值
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation{
String value() default "test";
}