什么是注解
An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated. Annotations have no direct effect on the operation of the code they annotate.
注解是一种元数据
, 可以添加到java
代码中类、方法、变量、参数、包
都可以被注解,注解对注解的代码没有直接影响。之所以产生作用, 是对其解析后做了相应的处理
。注解仅仅只是个标记罢了。
定义注解关键字:@interface
元注解
java
内置的注解有Override, Deprecated, SuppressWarnings
等, 作用相信大家都知道。
现在查看Override
注解的源码
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
发现Override
注解上面有两个注解, 这就是元注解
。 元注解
就是用来定义注解
的注解
.其作用就是定义注解的作用范围, 使用在什么元素上等等。
元注解共有四种@Retention, @Target, @Inherited, @Documented
@Retention 保留的范围,默认值为CLASS.
可选值有三种
-
SOURCE
, 只在源码
中可用 -
CLASS
, 在源码
和字节码
中可用 -
RUNTIME
, 在源码
、字节码
、运行时`均可用。
其中, @Retention
是定义保留策略
, 直接决定了我们用何种方式解析
, SOUCE
级别的注解是用来标记的, 比如Override, SuppressWarnings
. 我们真正使用的类型是CLASS(编译时)
和RUNTIME(运行时)
。
@Target 用来修饰哪些程序元素,
如 TYPE, METHOD, CONSTRUCTOR, FIELD, PARAMETER
等,未标注则表示可修饰所有。
@Inherited 是否可以被继承,默认为false
@Documented 是否会保存到 Javadoc
文档中
自定义注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface TestAnnotation {
String value();
String[] value2() default "value2";
}
类型 参数名() default 默认值;
其中默认值是可选的, 可以定义, 也可以不定义.
处理运行时注解
Retention
的值为RUNTIME
时, 注解会保留到运行时, 因此使用反射来解析注解。
使用的注解就是上一步的@TestAnnotation
。
先了解一下反射:
网友评论