一、注解概述:
- 从JDK5.0开始,JAVA增加了对元数据(MetaData)的支持,也就是Annotation(注解)。
- Annotation其实就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。
- Annotation可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存在Annotation的“name = value”对中。
- 未来是注解的天下,未来的开发模式都是基于注解的,一定程度上说:框架 = 注解+反射+设计模式。
二、注解的使用:
1.生成文档相关的注解
2.在编译时进行格式检查(JDK内置的三个基本注解)
@override:限定重写父类方法,该注解只能用于方法
@Deprecated:用于表示所修饰的元素(类,方法等)已过时。通常是因为所修饰的结构危险或者有更好的选择。
@SuppressWarnings:抑制编译器警告。
3.跟踪代码依赖性,实现替代配置文件功能。比如servlet中的web.xml配置文件中的url可以用一个注解@WebServlet简单实现:
三、自定义注解:
参照@SuppressWarnings定义:
- 注解声明为:@interface
- 内部定义成员,通常使用value表示
- 可以指定成员的默认值,使用default定义
- 如果自定义注解没有成员,表明是一个标识作用。
如果注解有成员,在使用注解时,需要指明成员的值。
自定义注解必须配上注解的信息处理流程(使用反射)才有意义。
四、JDK提供的四种元注解:
元注解的意思就是对现有的注解进行解释说明的注解
1.Retention:指定所修饰的Annotation的生命周期:SOURCE(javac编译后死亡)CLASS(默认行为,编译后仍存在,运行前死亡)RUNTIME(加载到内存,只有声明为RUNTIME生命周期的注解,才能通过反射获取)。
2.Target:用于指定被修饰的Annotation能用于修饰哪些程序元素
一般来说,自定义注解都会指明这两个元注解
3.Documented:表示所修饰的注解在被javadoc解析时,保留下来。
4.Inherited:被它修饰的Annotation将具有继承性。
五、JDK8中注解的新特性:
1.可重复注解:①在需要重复的注解上声明@Repeatable,成员值为需要重复的注解+s.class
②需要重复的注解的Target和Retention等元注解和重复的注解+s相同(也就是定义重复注解的注解需要和被定义的注解这两个元注解相同)。
2.类型注解:
ElementType.TYPE_PARAMETER表示该注解能写在类型变量的声明语句中(如泛型声明)
ElementType.TYPE_USE表示该注解能写在使用类型的任何语句中,