java基础-注解机制
-
注解基础
-
作用
- 生成文档,通过代码里标识的元数据生成javadoc文档
- 编译检查,通过代码里标识的元数据让编译器在编译期间进行检查验证
- 编译时动态处理,编译时通过代码里的元数据动态处理,例如动态生成代码
- 运行时动态处理,运行时通过代码里的元数据动态处理,例如使用反射注入实例
-
Java内置注解
-
内置注解-@Override:表示当前方法定义将覆盖父类中的方法
- 用来修饰方法,且只在编译期间有效,编译后的字节码文件中便不再存在,标识此注解的方法,编译器会检查该方法与父类中的方法签名是否相同(重写),若不同则会报错。
-
内置注解-@Deprecated:代码被弃用
- 能够保留到运行时
- 修饰构造方法、属性、局部变量、方法、包、参数、类型
-
内置注解-@SuppressWarnings:表示关闭编译器警告信息
- 只能存活在源码时
- 修饰类型、属性、方法、参数、构造器、局部变量
-
-
元注解
-
元注解-@Target:描述注解的使用范围
- public enum ElementType {
- TYPE, // 类、接口、枚举类
- FIELD, // 成员变量(包括:枚举常量)
- METHOD, // 成员方法
- PARAMETER, // 方法参数
- CONSTRUCTOR, // 构造方法
- LOCAL_VARIABLE, // 局部变量
- ANNOTATION_TYPE, // 注解类
- PACKAGE, // 可用于修饰:包
- TYPE_PARAMETER, // 类型参数,JDK 1.8 新增
- TYPE_USE // 使用类型的任何地方,JDK 1.8 新增
- }
-
元注解-@Retention&@RetentionTarget:注解保留的时间范围
- public enum RetentionPolicy {
- SOURCE, // 源文件保留
- CLASS, // 编译期保留,默认值
- RUNTIME // 运行期保留,可通过反射去获取注解信息
- }
-
元注解-@Documented:描述在使用javadoc工具生成文档时是否保留注解信息
-
元注解-@Inherited:被该注解修饰的注解会具有继承性
-
元注解-@Repeatable(java8)
-
元注解-@Native(java8)
-
-
注解与反射接口
- 反射包java.lang.reflect下的Annotated Element接口提供了获取注解中内容的方法
- 注:只有注解被修饰为RUNTIME后该注解才是运行时可见的,当class文件被装载时被保存在class文件中的注解才会被虚拟机读取。
-
自定义注解
-
-
深入理解注解
-
java8提供的新注解
-
注解支持继承吗?
- 注解并不支持继承, 但注解在编译后,编译器会自动继承java.lang.annotation.Annotation接口.
-
注解的实现原理
-