一:元注解:
元注解(meta-annotation)是指用来注解其他注解的注解。Java语言中提供了4种元注解,分别是@Retention、@Target、@Inherited和@Documented。它们的作用如下:
例如,@Retention有一个属性value,是RetentionPolicy类型的,而RetentionPolicy是一个枚举类型
RetentionPolicy有SOURCE、CLASS、RUNTIME三个值
- RetentionPolicy.SOURCE:被修饰的注解只会保留在源文件,当.java文件编译成.class文件时,被修饰的注解会被遗弃
- RetentionPolicy.CLASS:被修饰的注解被保留到.class文件,jvm加载.class文件时候被遗弃,是默认的生命周期
- RetentionPolicy.RUNTIME:被修饰的注解不仅被保存到.class文件中,jvm加载class文件之后还会存在
- java源文件(.java文件) 、编译后的文件(.class文件) 、内存中的字节码,生命周期比较 SOURCE < CLASS < RUNTIME ,作用范围越来越大
@Target:用于指定注解的作用目标。它有一个属性value,可以设置为ElementType.TYPE、ElementType.FIELD、ElementType.METHOD等,表示注解可以作用于类、字段、方法等不同的目标上。
@Inherited:用于指定注解是否可以被继承。如果一个注解被@Inherited注解,则它被用来注解的类的子类也会继承这个注解。
@Documented:用于指定注解是否包含在JavaDoc中。如果一个注解被@Documented注解,则它会被包含在JavaDoc中,方便开发者查看。
二:自定义注解
自定义注解需要使用关键字@interface来定义
第一个文件: package org.hj.com; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { String name(); int age(); } 第二个文件: package org.hj.com; @MyAnnotation(name="张三",age=28) public class HelloAnno { public static void main(String[] args) { MyAnnotation myAnnotation = HelloAnno.class.getAnnotation(MyAnnotation.class); String name = myAnnotation.name(); int age = myAnnotation.age(); System.out.println("获取到的注解name="+name); System.out.println("获取到的注解age="+age); } }
标签:文件,Java,name,age,RetentionPolicy,注解,class From: https://www.cnblogs.com/tianpan666/p/18044452