类加载问题
怎么样加载一个类进到运行的类中来.
我用了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();
}
}
}