我在运行时获取了一个类文件,并将其保存在特定位置。如何创建此类的对象:
Class.forName(MyDynamicClass);
这不起作用。该类没有任何包,那么如何实例化这个类?
我只有MyDynamicClass.class文件位于我的主文件夹
我尝试了“Amir Afghani”answer,它会抛出ClassNotFound异常。
答案 0 :(得分:0)
ClassLoader myClassLoader = ClassLoader.getSystemClassLoader();
// Step 2: Define a class to be loaded.
String classNameToBeLoaded = "MyDynamicClass";
// Step 3: Load the class
Class myClass = myClassLoader.loadClass(classNameToBeLoaded);
// Step 4: create a new instance of that class
Object whatInstance = myClass.newInstance();
答案 1 :(得分:0)
我已经测试了是否包装,两种情况都正常。
以下是课程
默认套餐:
public class MyDynamicClass {
}
在com.test包下
package com.test;
public class MyDynamicClass {
}
package com.test;
public class MyDynamicClassTest {
public static void main(String[] args) {
try {
Class clazz = Class.forName("com.test.MyDynamicClass");
Class clazz2 = Class.forName("MyDynamicClass");
System.out.println("clazz :: "+ clazz);
System.out.println("clazz :: "+ clazz2);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
Output: clazz :: class com.test.MyDynamicClass clazz :: class MyDynamicClass
一旦有了类对象,就可以调用newInstance()来创建对象。
你是如何编写课程的?你能确定存在.class文件吗?
答案 2 :(得分:0)
您可以尝试调试的步骤:
检查班级路径
当你执行Class.forName(" MyDynamicClass");
它在类路径中检查文件MyDynamicClass.class并加载它
运行程序时,请使用 -verbose 参数执行 这将帮助您确定在修复类路径问题后如何搜索和加载此类
如果您不想将其添加到类路径中,那么您肯定必须编写自己的类加载器(请参阅 java.net.URLClassLoader ,它提供了一种更简单的方法做这个)。这将允许您放置要加载的自定义路径