对基础知识做一个温习
1、关于java注解(Annotation)
注解是一种能被添加到 java 源代码中的 元数据,方法、类、参数、包都可以用注解来修饰。
可以看作是一个特殊的标记,程序在编译和运行时可以检测到这些标记而进行一些处理
2、声明
声明一个注解
// 修饰符必须为 public,不写默认为 public
// 关键字为 @interface
public @interface Mark{// 注解名称为 Mark
// 注解类型元素,类似于普通类中的属性,但是注解中写法不同
String value() default "Mark41";
boolean flag() default true;
}
除了以上这些,JDK 中还有一些 元注解,用来修饰注解
@Target 表明注解可以应用的 java元素类型
Target类型 | 描述 |
---|---|
ElementType.TYPE | 应用于 类、接口(包括注解)、枚举 |
ElementType.FIELD | 应用于 属性(包括枚举中的常量) |
ElementType.METHOD | 应用于 方法 |
ElementType.PARAMETER | 应用于 方法的形参 |
ElementType.CONSTRUCTOR | 应用于 构造函数 |
ElementType.LOCAL_VARIABLE | 应用于 局部变量 |
ElementType.ANNOTATION_TYPE | 应用于 注解类型 |
ElementType.PACKAGE | 应用于 包 |
ElementType.TYPE_PARAMETER | 1.8版本新增 应用于 类型变量 |
ElementType.TYPE_USE | 1.8版本新增,应用于任何使用类型的语句中(例如声明语句、泛型和强制转换语句中的类型) |
@Retention 表明注解的生命周期
Retention类型 | 描述 |
---|---|
RetentionPolicy.SOURCE | 编译时被丢弃,不包含在类文件中 |
RetentionPolicy.CLASS | JVM记载时被丢弃,包含在类文件中,默认是此方式 |
RetentionPolicy.RUNTIME | 由JVM加载,包含在类文件中,在运行时会被获取到 |
@Document 表明注解可以被 javadoc 或者类型的工具文档化
@Inherited 注解标记类的子类也会拥有这个注解
接下来将之前定义的注解完善一下
// 应用于类 接口 枚举
@Target(ElementType.TYPE)
// 包含在 类文件中
@Retention(RetentionPolicy.RUNTIME)
// 可以被工具文档化
@Documented
public @interface Mark{
String version() default "Mark41";
boolean flag() default true;
}
3、使用注解
新建一个类
@Mark(version = "MarkValue",flag = true)// 给注解中的元素赋值
public class MarkAnnotationTest {
String version;
boolean flag;
}
新建一个 main 类解析 被注解的类
public class AnnoationMain {
public static void main(String[] args) {
// 获取 MarkAnnotationTest 的 Class 对象
Class clazz = MarkAnnotationTest.class;
// 判断该类上是否使用了 Mark 注解
if(clazz.isAnnotationPresent(Mark.class))
{
System.out.println("MarkAnnotationTest 类上使用了 Mark 注解...");
// 获取该类上的 Mark 注解
Mark mark = (Mark)clazz.getAnnotation(Mark.class);
System.out.println("Mark.version = "+mark.version()+"\nMark.flag = "+mark.flag());
}else{
System.out.println("MarkAnnotationTest 类上没有使用 Mark 注解...");
}
}
}
执行结果