public class MyClass
{
public MyClass(){
}
public void sayHello(String who)
{
System.out.println("hello world "+who);
}
}
如果要动态的使用sayHello,可以用如下代码
import java.lang.reflect.*;
class TestClass
{
public static void main(String[] args)
{
//这是sayHello的参数类型为String
Class[] parameterTypes={String.class};
//把you这次字符串传进去
Object[] parameter={"you"};
//以下是动态装入的类名和需要调用的函数名
String className="MyClass";
String methodName="sayHello";
try{
Class iClass=Class.forName(className);
//产生一个Method对象(sayHello)
Method method=iClass.getMethod(methodName,parameterTypes);
//Class.forname只是动态的装入了类,我们还需要产生对象,因此
//需要调用它的构造函数,用以下方法调用
Constructor con=iClass.getConstructor(new Class[]{});
Object myclass=con.newInstance(new Object[]{});
//对象生成啦,现在调用它
method.invoke(myclass,parameter);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
上面的代码打印:hello world you
这段代码等同于
MyClass myclass=new MyClass();
myclass.sayHello("you");
由此可以看出动态的调用比静态的复杂得多。
注: Class 对象 实际上描述的只是类型,例如int,void,类,接口;
而Object类是java中所有类的父类。