日期:2014-05-20  浏览次数:20791 次

类加载问题
怎么样加载一个类进到运行的类中来.
我用了ClassLoader来实现.可是实现不了
比如:   D:\java文件夹下有一个Hello.java文件.里面是一个类Class   Hello
怎么样在别的类里加载这个类来用.
谢谢

------解决方案--------------------
跟 java文件 没关系
类加载有三种基本方法

class A{}
class B{}
class C{}
public class Loader{
public static void main(String[] args) throws Exception{
Class aa=A.class;
Class bb=Class.forName( "B ");
Class cc=ClassLoader.getSystemClassLoader().loadClass( "C ");
}
}

------解决方案--------------------
要调用其中的方法可以使用
Method method = cc.getDeclaredMethod(String name, Class <?> ... parameterTypes) //中间是参数说明

然后用method.invoke(Object obj, Object... args)
调用得到的方法

具体可以看API
------解决方案--------------------
你Hello类中的Out方法并没有参数 而你调用Method method = CC.getDeclaredMethod( "Out ",ptypes);时却加了两个参数 String HashMap
试试这段代码:(我试过可以打印Hello World)
import java.lang.reflect.*;

public class Test{

public static void main(String []args) {
try {

Class CC = Class.forName( "Hello ");
Class ptypes[] = new Class[2];
ptypes[0] = Class.forName( "java.lang.String ");
ptypes[1] = Class.forName( "java.util.Hashtable ");

try {
Object arg[] = new Object[2];
arg[0] = null;
arg[1] = null;
Method method = CC.getDeclaredMethod( "Out ",null);//,ptypes);
try {
method.invoke((Hello)CC.newInstance(),null);//, arg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}