注解
什么注解?
注解:annotation(标识,标签),从Java5开始支持注解
注解能干什么?
注解是贴在java程序元素上面
程序元素:类,方法,字段,方法参数,接口,构造函数,枚举
注解贴在程序上面有什么用?
在反射的时候,动态可以获取字节码,方法,字段等等程序元素,获取了这些程序元素,那么就能获取程序元素上贴的注解。这些注解会参与程序运行提供比较的相关信息和数据
枚举是一个特殊类
注解是一个特殊的接口,所有的注解都继承自java.lang.annotation这个接口。
完整的注解(从编写到最终运行)需要三方面的参与。
1.需要定义一个注解。
2.需要一个被贴的程序元素(类,方法,字段,构造器等)
3.第三方程序的支持(赋予我注解的特殊功能)
JDK中内置的注解
1.@Override 限定覆写父类方法
2.@Deprecated标记已过时的成员,被标记的方法不推荐使用.
问题1:有的注解可以贴在类上,方法上,字段上,有的却只能贴在类上
问题2:有的注解可以有一个或者多个参数,有的却不行。
JDK中的元注解
注解:贴在程序元素上面的标签
元注解:注解的注解(贴在注解上面的注解)
元注解主要用于限定当前的注解能够贴在哪儿?能够保留在哪个阶段(程序执行三个阶段
源代码阶段,字节码阶段,JVM中)
@Retention:表示注解可以保存在哪一个时期.
保存的时期的值,封装在RetentionPolicy枚举类中
@Target:表示注解可以贴在哪些位置(类,方法上,构造器上等等).
位置的常量封装在ElementType枚举类中:
ElementType.ANNOTATION_TYPE只能修饰Annotation
ElementType.CONSTRUCTOR只能修饰构造方法
ElementType.FIELD只能修饰字段(属性),包括枚举常量
ElementType.LOCAL_VARIABLE只能修饰局部变量
ElementType.METHOD只能修饰方法
ElementType.PACKAGE只能修饰包(极少使用)
ElementType.PARAMETER只能修饰参数
ElementType.TYPE只能修饰类,接口,枚举
自定义注解
1. 定义一个注解
语法:注解关键字 @Interface
2.被贴的程序元素
3.第三方程序参与赋予注解功能(反射程序)