一:注解(Annotation)概述
Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注。
框架 = 注解 + 反射 + 设计模式
二:常见的注解示例
使用Annotation时要在其他前面增加@符号,并把该Annotation当成一个修饰符使用。用于修饰它支持的程序元素。
//在编译时进行格式检查(JDK内置的三个基本注解)
@Override:限定重写父类方法,该注解只能用于方法
@Deprecated:用于表示所修饰的元素(类、方法等)已过时。通常是因为所修饰的结构危险或存在更好的选择。
@SuppressWarnlngs:控制编译器警告
三:自定义注解
定义新的 Annotation类型使用@interface关键字。
自定义注解自动继承了java.lang.annotation.Annotation接口。
Annotation的成员变量在Annotation定义中以无参数方法的形式来声明。其方法名和返回值定义了该成员的名字和类型。我们称为配置参数。类型只能是八种基本数据类型、String类型、Class类型、enum类型、 Annotation类型、以上所有类型的数组。
可以在定义Annotation的成员变量时为其指定初始值,指定成员变量的初始值可使用default关键字。
如果只有一个参数成员,建议使用参数名为value。
如果定义的注解含有配置参数,那么使用时必须指定参数值,除非它有默认值。格式是“参数名=参数值”,如果只有一个参数成员,且名称为value,可以省略"value="。
没有成员定义的Annotation称为标记,包含成员变量的Annotation称为元数据Annotation。
注意:自定义注解必须配上注解的信息处理流程(使用反射的方式)才有意义。
/**
* 如何自定义注解?参照 @SuppressWarnings定义。
* 1.注解声明为 @interface。
* 2.内部定义成员:通常使用value表示。
* 3.可以指定成员的默认值,使用default定义。
* 4.如果自定义注解没有成员,表明是一个标识作用。
* 5.如果注解有成员,在使用注解时,需要指明成员的值,如果有默认值,则不用。
*/
//@interface和接口没有任何关系,只不过是一个固定的结构
public @interface MyAnnotation {
String value() default "hello";
}
四:JDK中的元注解
(1)四个基本元注解
作用在其他注解的注解(或者说--元注解)是:
@Retention - 标识这个注解怎么保存,是只在代码中(SOURCE),还是编入class文件中(CLASS)(默认行为),或者是在运行时可以通过反射访问(RUNTIME)。
@Documented - 标记这些注解是否包含在用户文档中。
@Target - 用于指定被修饰的Annotation能用于修饰哪些程序元素。
@Inherited - 被修饰的Annotation将具有继承性。
类比:元数据(对现有数据进行修饰)。
String neme = "hgk";
其中,hgk就是元数据。