Java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法,它就是注解annotation。
注解分类-
按照运行机制
a. 源码注解:注解只在源码中存在,编译成.class文件就不存在了。
b. 编译时注解:注解在源码和.class文件中都存在,例如JDK自带的@Override
、@Deprecated
、@SuppressWarnings
等。
c. 运行时注解:在运行阶段起作用,甚至会影响运行逻辑的注解。 -
按照来源
来自JDK的注解
来自第三方的注解
自定义的注解 - 元注解:注解的注解,定义注解时需要用到注解
- 使用@interface关键字定义注解
- 成员以无参数无异常的方式声明
- 可用default为成员指定默认值
- 成员的类型为基本类型、String、Class、Annotation以及Enumeration
- 如果注解只有一个成员,约定取名为value(),使用时可忽略成员名和=
-
@target
:取值为CONSTRUCTOR / FIELD / LOCAL_VARIABLE / METHOD / PACKAGE / PARAMETER / TYPE,表示自定义注解的作用范围CONSTRUCTOR:构造方法声明
FIELD:字段生命
LOCAL_VARIABLE:局部变量声明
METHOD:方法声明
PACKAGE:包声明
PARAMTER:参数声明
TYPE:类接口 @Retention
:取值为SOURCE / CLASS / RUNTIME,表示自定义注解的存在阶段SOURCE:只在源码中显示,编译时会丢弃
CLASS:编译时会记录到.class文件中,运行时忽略
RUNTIME:运行时存在,可通过反射获取@Inherited
:表示允许子注解继承@Documented
:生成javadoc会包括注解信息
例子
@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Decription {
String desc();
String author();
int age() default 18;
}
使用注解的语法
@<注解名>(<成员名2>=<成员值1>,<成员名2><成员值2>,...)
例子
@Description(desc="I am eyeColor",author="imooc boy",age=18)
public String eyeColor(){
return "red";
}
Github:https://github.com/i2it,欢迎关注。