Java中的注解学习笔记
注解出现在jdk1.5。并且jdk1.5版本中内置了三种标准的注解,如下:
-
@Override:表示当前方法的定义将覆盖超类中的方法。 @Deprecated:表示当前方法已过期,不推荐使用。如果使用,则该方法会出现一条删除线,表示不推荐使用。 @SuppressWarnings:告诉编译器,忽略指定的警告信息,即:不提示黄色下划线。
Java中提供的四种注解,作用就是创建自定义注解。
-
@Target:说明注解的使用范围。通过和ElementType一起使用,指定注解的使用范围。
ElementType的常见属性值有:
TYPE:类,接口或者枚举 FIELD:域,包含枚举常量 METHOD:方法 PARAMETER:参数 CONSTRUCTOR:构造方法 LOCAL_VARIABLE:局部变量 ANNOTATION_TYPE:注解类型 PACKAGE:包
例如:@Target(ElementType.Type)表明该注解只能在类、接口和枚举中使用。
-
@Retention:称为“元注解”。指明该注解的生存周期,即:该注解保留到何时被销毁。
一般和RetentionPolicy一起使用,指明注解的生存周期。
RetentionType的属性值有:
SOURCE:保留至源码,编译后即丢弃。 CLASS: 保留至编译阶段,编译后的class文件中存在,当在jvm运行时丢弃,这是默认值。 RUNTIME: 保留至运行阶段,编译后的class文件中存在,当在jvm运行时保留,可以被反射调用。
举例:Retention(RetentionPolicy.RUNTIME)表示该注解将保留至运行阶段。
如果注解需要在反射中使用,那么就需要保留至运行阶段。
-
@Documented:指明注解可以被例如javadoc的工具文档化。 @Inherited:允许子类继承父类中的注解。
自定义注解:
-
先创建一个annotation,即:注解。类似于一个类。
使用@interface来说明一个注解。举例如下:
public @interface test {
}
-
创建完成之后,可以为该注解指定生存周期,即:存在于编码阶段、还是编译阶段、还是运行阶段。
// 指定该注解保留至运行阶段
@Retention(RetentionPolicy.RUNTIME)
public @interface test{
}
-
注解创建完后,可以为该注解添加属性。
@Retention(RetentionPolicy.RUNTIME)
public @interface test {
// 声明一个字符串类型的属性value
public String value();
}
注意:注解中属性的声明类似于抽象方法的声明。
声明的注解属性只能是:基本类型、String、Class、枚举、或者一维数组。
以上注解就创建完成了。
