1反射
1.1访问构造方法
通过Jave反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访和修改描述Jave对象本身信息的功能。Java 反射机制的功能十分强大,在java.langreflect包对该功能的支持。
在通过下列一组方法访问构造方法时,将返回 Constructor 类型的对象或数组。每个Constuetor对代表一个构造方法,利用 Constructor 对象可以操纵相应的构造方法;
例题1
demo
package com.mr;
public class Demo1 {
1.2访问成员变量
例题2
demo2
1.3访问成员方法
demo3
2Annotation注解功能
2.1定义Annotation类型
在定义Annotation 类型时,也需要用到用来定义接口的 interface 关键字,但需要在 imertace 关制加一个“@”符号,即定义 Annotation 类型的关键字为@interface,这个关键字的隐含意思是继承java.lang.annotation.Annotation 接口。例如,下面的代码就定义了一个 Annotation类型:
public @interface NoMemberAnnotation ({
上面定义的Annotation类型@NoMemberAnnotation 未包含任何成员,这样的Amotation类型被称为markerannotation。下面的代码定义了一个只包含一个成员的Annotation类型:
public @interface OneMemberAnnotation [String value();
String: 成员类型。可用的成员类型有 String、 Class、 primitive、 enumerated和 amnotation,及所列类型的数组。
区 value:成员名称。如果在所定义的 Annotation 类型中只包含一个成员,通常将成员名称命名为 value。
下面的代码定义了一个包含多个成员的 Annotation 类型:public @interface MoreMemberAnnotation {String describe();Class type();
0-国、
aw.exe(20:
在为Annotation 类型定义成员时,也可以为成员设置默认值。例如,下面的代码在定义Amnotation类型时就为成员设置了默认值:
public @interface DefaultValueAnnotation (String describe() default "<默认值>"Class type() default void.class;
在定义 Annotation 类型时,还可以通过 Annotation 类型@Target 来设置 Annotation 类型适用的程序t素种类。如果未设置@Target,则表示适用于所有程序元素。枚类 ElementType 中的教举常量用来道@Targer,如表 16.6所示。
2.2访问Annotation信息
如果在定义Annotation 类型时将@Retention 设置为 RetentionPolicy.RUNTIME,那么在运行超通过反射就可以获取到相关的 Annotation 信息,如获取构造方法、字段和方法的 Annotation信息Constructor 类、Field 类和 Method 类均继承了 AccessibleObject 类,在 AccessibleObject中定个关于 Annotation 的方法。其中,方法 isAnnotationPresent(Class<? extends Annotation> annotatio0用来查看是否添加了指定类型的 Annotation,如果是则返回 true,否则返回 false; 方法 etAmotut(Class<T>annotationClass)用来获得指定类型的 Annotation,如果存在则返回相应的对象,否则返目方法getAnnotations0用来获得所有的 Annotation,该方法将返回一个 Annotation 数组。
在 Constructor 类和 Method 类中还定义了方法 getParameterAnnotations0,用来获得为所有参的 Annotation,将以 Annotation 类型的二维数组返回,在数组中的顺序与声明的顺序相同。如果数则返回一个长度为0的数组