如何实例化我在运行时获得的.class文件

时间:2015-05-30 07:03:32

标签: java object

我在运行时获取了一个类文件,并将其保存在特定位置。如何创建此类的对象:

Class.forName(MyDynamicClass); 

这不起作用。该类没有任何包,那么如何实例化这个类?

我只有MyDynamicClass.class文件位于我的主文件夹

我尝试了“Amir Afghani”answer,它会抛出ClassNotFound异常。

3 个答案:

答案 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)

您可以尝试调试的步骤:

  1. 检查班级路径
    当你执行Class.forName(" MyDynamicClass");
    它在类路径中检查文件MyDynamicClass.class并加载它

  2. 运行程序时,请使用 -verbose 参数执行 这将帮助您确定在修复类路径问题后如何搜索和加载此类

  3. 如果您不想将其添加到类路径中,那么您肯定必须编写自己的类加载器(请参阅 java.net.URLClassLoader ,它提供了一种更简单的方法做这个)。这将允许您放置要加载的自定义路径