java 注解

对基础知识做一个温习

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_PARAMETER1.8版本新增 应用于 类型变量
ElementType.TYPE_USE1.8版本新增,应用于任何使用类型的语句中(例如声明语句、泛型和强制转换语句中的类型)

@Retention 表明注解的生命周期

Retention类型描述
RetentionPolicy.SOURCE编译时被丢弃,不包含在类文件中
RetentionPolicy.CLASSJVM记载时被丢弃,包含在类文件中,默认是此方式
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 注解...");
        }
    }
}

执行结果
image.png

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页