怎么样加载一个类进到运行的类中来.
我用了ClassLoader来实现.可是实现不了
比如: D:\java文件夹下有一个Hello.java文件.里面是一个类Class Hello
怎么样在别的类里加载这个类来用.
谢谢
我用了ClassLoader来实现.可是实现不了
比如: D:\java文件夹下有一个Hello.java文件.里面是一个类Class Hello
怎么样在别的类里加载这个类来用.
谢谢
调试欢乐多
类加载有三种基本方法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");
}
}
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
public class Hello {
public void Out(){
System.out.println("Hello world");
}
}实现部分
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",ptypes);
try {
method.invoke(CC, arg);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException 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();
}
}可是我还是调试不通..
试试这段代码:(我试过可以打印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();
}
}
}
Method method = CC.getDeclaredMethod("Out",null);//,ptypes);
method.invoke((Hello)CC.newInstance(),null);//, arg);
Class aa=A.class;
Class bb=Class.forName("B");
Class cc=ClassLoader.getSystemClassLoader().loadClass("C");