classLoader.loadClass(className); 使用案例
时间: 2024-03-20 17:40:54 浏览: 65
以下是一个使用ClassLoader.loadClass(className)动态加载类的简单例子:
```
public class Main {
public static void main(String[] args) throws Exception {
// 定义要加载的类的全限定名
String className = "com.example.MyClass";
// 创建自定义的ClassLoader实例
ClassLoader myClassLoader = new MyClassLoader();
// 使用ClassLoader动态加载类
Class<?> myClass = myClassLoader.loadClass(className);
// 创建该类的实例
Object myObject = myClass.newInstance();
// 调用该类的方法
myClass.getMethod("myMethod").invoke(myObject);
}
}
// 自定义ClassLoader
class MyClassLoader extends ClassLoader {
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
if ("com.example.MyClass".equals(name)) {
// 从文件或网络中读取类的字节码,并转换为Class对象返回
byte[] classData = {/* class file data */};
return defineClass(name, classData, 0, classData.length);
}
return super.findClass(name);
}
}
// 要动态加载的类
class MyClass {
public void myMethod() {
System.out.println("Hello, world!");
}
}
```
在上面的例子中,我们定义了一个要加载的类的全限定名为"com.example.MyClass",然后创建了一个自定义的ClassLoader实例MyClassLoader,使用它的loadClass方法动态加载该类。在加载成功后,我们创建了该类的实例,并调用了它的方法"myMethod",最终输出了"Hello, world!"。注意,由于我们使用的是自定义的ClassLoader,因此可以根据需要实现不同的加载方式,例如从文件或网络中读取类的字节码。
阅读全文