Java注释
概念:
- JDK1.5之后的特性
- 说明程序的
- 使用注解:@注解名称
作用分类:
- 编写文档:通过代码里标识的注解生成的文档,生成文档doc
- 代码分析:通过代码里标识的注解对代码进行分析,使用反射
- 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查,Override
- 值得注意的是,注解不是代码本身的一部分,对代码的运行效果没有直接影响
JDK中的预定义的一些注解
- @Override:检测被该注解标注的方法是否是继承自父类(接口)的
- @Deprecated:该注解的标注的内容,表示已过时的
- @SupperssWarnings:压制警告,一般传递参数”all”
自定义注解
- 格式:
- 元注解
- public @interface 注解名称{属性列表}
本质:注解本质上就是一个接口,该接口默认继承Annotation接口
- public interface MyAnno extends java.lang.annotation.Annotation {}
- 属性:接口中可以抽象方法
- 属性的返回值类型:基本数据类型、String、枚举、注解、以上类型的数组
- 定义了属性,在使用时需要给属性赋值
- 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时可以不进行赋值
- 如果一个属性需要赋值,并且属性的名称时value,则value可以省略,直接定义值
- 数组赋值时,值使用{}包裹,如果数组中只有一个值,则{}可以省略
- 元注解:用于描述注解的注解
- @Target:描述注解能够作用的位置
- ElementType取值:
- TYPE:可以作用于类上
- METHOD:可以作用于方法上
- FIELD:可以作用于成员变量上
- ElementType取值:
- @Target:描述注解能够作用的位置
-
- @Retention:描述注解能够保留的阶段(source,class,runtime)
- @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
- @Documented:描述注解是否被抽取到API文档中
- @Inherited:描述注解是否被子类继承
- @Retention:描述注解能够保留的阶段(source,class,runtime)
注解的提取
注解通过反射提取,首先可以通过Class对象的isAnnotationPresent()方法判断它是否应用了某个注解
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {}
然后通过getAnnotation()方法来获取Annotation对象
public <A extends Annotation> A getAnnotation(Class<A> annotationClass) {}
或者是getAnnotation()方法
public Annotation[] getAnnotations() {}
前一种方法返回指定类型的注解,后一种方法返回这个元素上全部注解
@TestAnnotation() public class Test { public static void main(String[] args) { boolean hasAnnotation = Test.class.isAnnotationPresent(TestAnnotation.class); if ( hasAnnotation ) { TestAnnotation testAnnotation = Test.class.getAnnotation(TestAnnotation.class); System.out.println("id:"+testAnnotation.id()); System.out.println("msg:"+testAnnotation.msg()); } } }

浙公网安备 33010602011771号