黑马程序员----JAVA----注解
2013-02-26 00:40
417 查看
----------------------------------android培训、java培训、期待与您交流!------------------------------
span style="font-size:18px;">
----------------------------------android培训、java培训、期待与您交流!------------------------------
span style="font-size:18px;">
注解(注释)Annotation类 jdk1.5以后提供的新特性 ①类中的注释有三个@Deprecated(废除)、@Override(复写)、@SuppressWarnings(压缩警告) Deprecated类 用 @Deprecated 注释的程序元素,不鼓励程序员使用这样的元素,通常是因为它很危险或存在更好的选择。在使用不被赞成的程序元素或在不被赞成的代码中执行重写时,编译器会发出警告。 Override类 @Override表示一个方法声明打算重写超类中的另一个方法声明。 SuppressWarnings类 @SuppressWarnings指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。如果要在特定的方法中取消显示某个警告,则应该注释该方法而不是注释它的类。 注释的反射: class类中的isAnnotation()和isAnnotationPresent方法可以检测这个class对象上是否有注释并且可以获取这个注释 boolean isAnnotation() 如果此 Class 对象表示一个注释类型则返回 true。 boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。 ②注释中的注释有四个Documented类、Inherited类、Retention类和Target类 Documented类 指示某一类型的注释将通过 javadoc 和类似的默认工具进行文档化。 Inherited类 指示注释类型被自动继承。如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。 注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。 Retention类 指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释,则保留策略默认为 RetentionPolicy.CLASS。 三种取值:RetentionPolicy.SOURCE 、RetentionPolicy.CLASS 、RetentionPolicy.RUNTIME 分别对应的阶段为:java源文件,class文件,内存字节码 注意:只有元注释类型直接用于注释时,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() + " )"); } } } } 输出结果如下: Test( method = method_1 , id = 1 , description = hello method_1 ) Test( method = method_2 , id = 2 , description = no description ) Test( method = method_3 , id = 3 , description = last method )
----------------------------------android培训、java培训、期待与您交流!------------------------------
相关文章推荐
- 黑马程序员 知识点总结-Java注解
- 黑马程序员之Java--了解注解及其应用
- 黑马程序员——Java中的注解
- 黑马程序员_王康 java反射,枚举,注解
- 黑马程序员 Java高新技术 注解,泛型
- 【黑马程序员】java基础加强_注解
- 黑马程序员——Java中的注解
- 黑马程序员--JAVA之内省、注解与类加载器
- 黑马程序员-java注解
- 黑马程序员——java加强之注解
- 黑马程序员 Java高新技术---注解
- 黑马程序员---java几个基本的注解的使用
- 【黑马程序员】张孝祥Java高新技术_内省、注解、泛型
- 黑马程序员-了解注解及java提供的几个基本注解
- 黑马程序员—Java提高3(注解,类加载器,代理)
- 黑马程序员 -java基础 类加载器注解内省
- 黑马程序员:Java基础总结----java注解
- 黑马程序员_Java注解学习笔记
- 黑马程序员 Java加强 注解 泛型 类加载
- 黑马程序员_java基础加强_静态导入_反射_枚举_注解_内省_泛型_代理