----------------------android培训、java培训、期待与您交流! ----------------------
注解(注释)Annotation类
jdk1.5以后提供的新特性
①类中的注释有三个@Deprecated(废除)、@Override(复写)、@SuppressWarnings(压缩警告)
Deprecated类
用
Override类
@Override表示一个方法声明打算重写超类中的另一个方法声明。
SuppressWarnings类
@SuppressWarnings指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。如果要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。
注释的反射:
class类中的isAnnotation()和isAnnotationPresent方法可以检测这个class对象上是否有注释并且可以获取这个注释
②注释中的注释有四个Documented类、Inherited类、Retention类和Target类
Documented类
指示某一类型的注释将通过
Inherited类
指示注释类型被自动继承。如果在注释类型声明中存在
注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。
Retention类
指示注释类型的注释要保留多久。如果注释类型声明中不存在
三种取值:RetentionPolicy.SOURCE
注意:只有元注释类型直接用于注释时,Target
Target类
指示注释类型所适用的成分。
参数:
ElementType.[
ANNOTATION_TYPE
CONSTRUCTOR
FIELD
LOCAL_VARIABLE
METHOD
PACKAGE
PARAMETER
TYPE
③。注解属性
注解的属性就类似于注释的标志
注解的属性可以包括String类型,Class类型,8个基本类型,8个基本类型加String类型的数组类型,枚举类型,注释类型。
自定义注解实例
package cn.itcast.day2;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
/*
* 元注解@Target,@Retention,@Documented,@Inherited
* @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:
* ElemenetType.CONSTRUCTOR 构造器声明
* ElemenetType.FIELD 域声明(包括 enum 实例)
* ElemenetType.LOCAL_VARIABLE 局部变量声明
* ElemenetType.METHOD 方法声明
* ElemenetType.PACKAGE 包声明
* ElemenetType.PARAMETER 参数声明
* ElemenetType.TYPE 类,接口(包括注解类型)或enum声明
* @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:
* RetentionPolicy.SOURCE 注解将被编译器丢弃
* RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃
* RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。
* @Documented 将此注解包含在 javadoc 中
* @Inherited 允许子类继承父类中的注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
/*
* 定义注解 Test
* 注解中含有两个元素 id 和 description
* description 元素 有默认值 "no description"
*/
public @interface Test {
public int id();
public String description() default "no description";
}
下面是一个使用注解 和 解析注解的实例
package cn.itcast.day2;
import java.lang.reflect.Method;
public class Test_1 {
/*
* 被注解的三个方法
*/
@Test(id = 1, description = "hello method_1")
public void method_1() {
}
@Test(id = 2)
public void method_2() {
}
@Test(id = 3, description = "last method")
public void method_3() {
}
/*
* 解析注解,将Test_1类 所有被注解方法 的信息打印出来
*/
public static void main(String[] args) {
Method[] methods = Test_1.class.getDeclaredMethods();
for (Method method : methods) {
/*
* 判断方法中是否有指定注解类型的注解
*/
boolean hasAnnotation = method.isAnnotationPresent(Test.class);
if (hasAnnotation) {
/*
* 根据注解类型返回方法的指定类型注解
*/
Test annotation = method.getAnnotation(Test.class);
System.out.println("Test( method = " + method.getName()
+ " , id = " + annotation.id() + " , description = "
+ annotation.description() + " )");
}
}
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima