Java 如何从jar文件动态加载类

Java 如何从jar文件动态加载类,java,class,jar,runtime,classloader,Java,Class,Jar,Runtime,Classloader,如果我有一个包含许多类的jar文件,那么如何在运行时获取类和创建实例。在这段代码中,我不理解Class.forName行,MyClass是包含jar文件的那个类,还是jar文件加载后将创建的那个类 URLClassLoader child = new URLClassLoader( new URL[] {myJar.toURI().toURL()}, this.getClass().getClassLoader() ); Class classToLoad = C

如果我有一个包含许多类的jar文件,那么如何在运行时获取类和创建实例。在这段代码中,我不理解Class.forName行,MyClass是包含jar文件的那个类,还是jar文件加载后将创建的那个类

URLClassLoader child = new URLClassLoader(
        new URL[] {myJar.toURI().toURL()},
        this.getClass().getClassLoader()
);
Class classToLoad = Class.forName("com.MyClass", true, child);
Method method = classToLoad.getDeclaredMethod("myMethod");
Object instance = classToLoad.newInstance();
Object result = method.invoke(instance);

Class.forName
加载一个类

第一个参数是类的(规范)名称。在本例中,您尝试加载类
com.MyClass

第二个参数指定应该在该点初始化类(
static
变量被初始化,并且
static
块被运行)


第三个参数是类将从中加载的
ClassLoader
。在您的情况下,它将尝试从
myJar
中查找类,但是如果在那里找不到该类,它将尝试从调用类加载的同一
ClassLoader
中加载该类。

您是否忘记了
ClassLoader child=new URLClassLoader(
在您的代码之前?请参阅和的文档。也可以帮助查看的文档。