.zj.sample.Point.output()
Java中Class类工作原理详解(5)
时间:2010-03-27
9.动态调用一个类的实例(完全没有出现point这个名字)
package com.zj.sample;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
class Point {
static {
System.out.println("Loading Point");
}
int x, y;
void output() {
System.out.println("x=" + x + "," + "y=" + y);
}
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
class ClassTest {
public static void main(String[] args) {
try {
Class c = Class.forName("com.zj.sample.Point");
Constructor[] cons = c.getDeclaredConstructors();
Class[] params = cons[0].getParameterTypes();// 察看构造器的参数信息
Object[] paramValues = new Object[params.length];// 构建数组传递参数
for (int i = 0; i < params.length; i++) {
if (params[i].isPrimitive())// 判断class对象表示是否是基本数据类型
{
paramValues[i] = new Integer(i);
}
}
Object o = cons[0].newInstance(paramValues);// 创建一个对象的实例
Method[] ms = c.getDeclaredMethods();// 调用方法
ms[0].invoke(o, null);// 用指定的参数调用(output方法没有参数,null)
} catch (Exception e) {
e.printStackTrace();
}
}
}
结果:
Loading Point
x=0,y=1 |