一.反射
众所周知,所有 Java 类均继承了 bjet 类,在 Object 类中定义了一个 getClass0方法,该回一个类型为Class的对象。例如下面的代码:
Demo1 d1= new Demo1();
Class c1 = d1.getClass();
1.访问构造方法
在通过下列一组方法访问构造方法时,将返回Constructor类型的对象或数组。每个Constructor对象代表一个构造方法,利用Constructor 对象可以操纵相应的构造方法:
1.getConstructors()。
2.getConstructor(Class<?>...parameterTypes)
3.getDeclaredConstructors()
4.getDeclaredConstructor(Class<?>...parameterTypes)。
如果是访问指定的构造方法,需要根据该构造方法的入口参数的类型来访问。例如,访问一个入口参数类型依次为 String 型和 nt 型的构造方法,通过下面两种方式均可实现:
objectClass.getDeclaredConstructor(String.class, int.class);
objectClass.getDeclaredConstructor(new Class[] ( String.class, int.class );
Constructor 类中提供的常用方法如表 16.2所示
Modifier类常用静态方法如表16.3所示
[例16.1]反射一个类的所有构造方法
2.访问成员变量
1.利用Field对象可以操纵相应的成员变量
1.getFields();
2.getField(String name)
3.getDeclaredFields()
4.getDeclaredFields(String name)
Field 类中提供的常用方法如表 16.4所示.
[例16.2]反射一个类的所有成员变量
3.访问成员方法
利用Method 对象可以操纵相应的方法:
1.getMethods().
2.getMethods(String name, Class<?>...parameterTypes).
3.getDeclaredMethods()
4.getDeclaredMethods(String name, Class<?>...parameterTypes)
如果是访问指定的方法,需要根据该方法的名称和入口参数的类型来访问。例如,访问一个为print、入口参数类型依次为 String 型和 nt型的方法,通过下面两种方式均可实现:
objectClass.getDeclaredMethod("print", String.class, int.class);
objectClass.getDeclaredMethod("print", new Classl (String.class, int.class ));
Method 类中提供的常用方法如表 16.5 所示
[例16.3]反射一个类的所有成员方法
二.Annotation注解功能
1.定义Annotation类型
1.在定义Annotation类型时,,也需要用到用来定义接口的 interface,
public @interface NoMenberAnnotation{
}
2.下面的代码定义了员工只包含一个Annotation类型
public @interface NoMenberAnnotation{
String value();
}
[例16.4]创建自定义的注解
2.访问Annotation 信息
[例16.5]访问注释中的信息