java 反射机制

来源:互联网 发布:机械结构优化设计 编辑:程序博客网 时间:2024/06/08 11:06

Java反射机制功能进分强大,在java.lang.reflect包提供;
所有的java类均继承了Object类,在Object类中定义了一个getClass()方法,该方法返回一个类型为Class的对象。
这里写图片描述

注:通过getFields()和getMethods()方法依次获得权限为public的成员变量和方法时,还包含从超类中继承到的成员变量和方法;而通过getDeclaredFields()和getDeclaredMethods()方法只获得在本类中定义的所有成员变量和方法;

访问构造方法:

通过下表一组方法访问构造方法时,将返回Constructor类型的对象或数组。每个Constructor对象代表一个构造方法,利用Constructor对象可以操纵相应的构造方法。getConstructors()getConstructor(Class<?>...parameterTypes)getDeclaredConstructors()getDeclaredConstructor(Class<?>...parameterTypes)如果访问指定的构造方法,需要根据该构造方法的入口参数的类型来访问。如访问一个入口参数依次为Stringint型的构造方法可以通过如下两种方法:objectClass.getDeclaredConstructors(String.class, int.class);objectClass.getDeclaredConstructors(new Class[] {String.class, int.class});

这里写图片描述

访问成员变量:

在通过下列一组方法访问成员变量,将返回Field类型方法或数组。每一个Field对象代表一个成员变量,利用Field可以操纵相应的成员变量:
getFields()
getField(String name)
getDeclaredFields()
getDeclaredField(String name)
如果是访问指定的成员变量,可以通过该成员变量的名称来访问。例如访问一个名为birthday的成员变量:
object.getDeclaredField(“birthday”);

这里写图片描述

访问成员方法:

在通过下列一组方法访问方法时,将返回Method类型的对象或数组。每个Method对象代表一个方法,利用Method对象可以操纵相应的方法:getMethods()getMethod(String name, Class<?>...parameterTypes)getDeclaredMethods()getDeclaredMethod(String name, Class<?>...parameterTypes)如果是访问指定的方法,需要根据该方法的名称和入口参数的类型来访问。例如访问一个名为print,入口参数类型依次为Stringint型的方法,可以通过如下两种方式实现objectClass.getDeclaredMethod("print", String.class, int.class);objectClass.getDeclaredMethod("print", new Class[]{String.class, int.class});

这里写图片描述