// 统一调用成员方法
public class D {
// 构造函数1
public void func1() {
System.out.println("this is func1");
}
// 构造函数2
public void func2(Integer m) {
System.out.println("this is func2:" + m);
}
// 构造函数3
public void func3(String str, Integer m) {
System.out.println("this is func3:" + str + m);
}
static boolean process(String className, String funcName, Object[] para) throws Exception {
// 获取类信息对象
Class classInfo = Class.forName(className);
// 形成函数参数序列
Class c[] = new Class[para.length];
for (int i = 0; i < para.length; i++) {
c[i] = para[i].getClass();
}
// 调用无参数构造函数
Object obj = classInfo.getConstructor().newInstance();
// 获得函数方法信息
Method method = classInfo.getMethod(funcName, c);
// 执行该方法
method.invoke(obj, para);
return true;
}
// 第二种方式
// 通过class类的有参getConstructor方法,来获得对应的一个构造方法信息,然后调用newInstance方法,完成该实例的创建过程。
public static void main(String[] args) throws Exception {
Boolean flg3 = process("com.reflect.testPackage1.D", "func3", new Object[] { "strstrstrstr", 250 });
Boolean flg2 = process("com.reflect.testPackage1.D", "func2", new Object[] { 250 });
Boolean flg1 = process("com.reflect.testPackage1.D", "func1", new Object[] {});
System.out.println("process do success");
}
}
只要知道类名称字符串,方法名称字符串,方法参数值,就可以运用反射机制调用该方法。
通过该段程序,可以看到反射机制的特点是:可以把类名,方法名作为字符串变量,直接对这两个字符串变量进行操作,就能产生实例及相应的运行方法,这与普通的先new再直接调用所需方法有本质的不同。
本文深入探讨了Java反射机制的应用,展示了如何通过类名字符串、方法名字符串和参数值调用方法,实现动态创建实例和执行方法的过程。反射机制允许将类名和方法名作为变量,直接操作这些变量以产生实例和运行方法,区别于传统的new实例和直接调用方法的方式。
1560

被折叠的 条评论
为什么被折叠?



