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

关于java动态加载类的问题
使用java的反射机制可以动态加载class文件,但是我对它有一下几个问题:
1、如果这个class和运行的程序不在同一个目录下该如何加载?
2、如果我想加载一个jar文件,如何导入这个jar文件中的类?

------解决方案--------------------
重载ClassLoader
------解决方案--------------------
重新定义类加载器,也就是ClassLoader,覆盖其中的一个方法findClass
例如,应用程序可以创建一个网络类加载器,从服务器中下载类文件。示例代码如下所示:

ClassLoader loader = new NetworkClassLoader(host, port);
Object main = loader.loadClass( "Main ", true).newInstance();
. . .
网络类加载器子类必须定义方法 findClass 和 loadClassData,以实现从网络加载类。下载组成该类的字节后,它应该使用方法 defineClass 来创建类实例。示例实现如下:

class NetworkClassLoader extends ClassLoader {
String host;
int port;

public Class findClass(String name) {
byte[] b = loadClassData(name);
return defineClass(name, b, 0, b.length);
}

private byte[] loadClassData(String name) {
// load the class data from the connection
. . .
}
}