【Java面试题第六期】你对注解了解多少?
首先注解是什么?
Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。 Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。
上面是注解的定义,可以从中总结以下几个关键的点:
干什么的:用来在程序中对元素(元素就是Java中的类、方法等)关联其他信息的。
是什么:它是一个接口,一个特殊的接口。
怎么用:通过反射获取元素中的注解对象,在获取注解对象中的元数据(其他信息)。
标准元注解是哪些?
元注解的作用是负责注解其他注解。 Java5.0 定义了 4 个标准的meta-annotation 类型,它们被用来提供对其它 annotation 类型作说明。
@Target 修饰的对象范围
@Target说明了Annotation所修饰的对象范围: Annotation可被用于 packages、types(类、接口、枚举、Annotation 类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch 参数)。在 Annotation 类型的声明中使用了 target可更加明晰其修饰的目标
@Retention定义 被保留的时间长短
Retention定义了该 Annotation 被保留的时间长短:表示需要在什么级别保存注解信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效),取值(RetentionPoicy)由:
1. SOURCE:在源文件中有效(即源文件保留)
2. CLASS:在 class 文件中有效(即 class 保留)
3. RUNTIME:在运行时有效(即运行时保留)
@Documented描述-javadoc
@ Documented 用于描述其它类型的 annotation 应该被作为被标注的程序成员的公共 API,因此可以被例如 javadoc 此类的工具文档化。
@Inherited阐述了某个被标注的类型是被继承的
@Inherited元注解是一个标记注解,@Inherited 阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited 修饰的 annotation 类型被用于一个 class,则这个 annotation 将被用于该class 的子类。
注解的作用:
1)提供信息给编译器:编译器可利用注解来探测错误和警告信息
2)编译阶段:软件工具可以利用注解信息来生成代码、html 文档或做其它相应处理;
3)运行阶段:程序运行时可利用注解提取代码
注解是通过反射获取的,可以通过 Class 对象的isAnnotationPresent()方法判断它是否应用了 某个注解,再通过 getAnnotation()方法获取Annotation 对象
小程序:IT面试题练习