Java 如何实例化运行时获取的.class文件

Java 如何实例化运行时获取的.class文件,java,object,Java,Object,我在运行时得到一个类文件,并将其保存在特定位置。如何创建此类的对象: Class.forName(MyDynamicClass); 这是行不通的。这个类没有任何包,那么如何实例化这个类呢 我只有MyDynamicClass.class文件,它在我的主文件夹中 我尝试了“Amir Afghani”,它抛出了ClassNotFound异常 我已经测试了带和不带软件包的情况,两种情况都很好 ClassLoader myClassLoader = ClassLoader.getSys

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

Class.forName(MyDynamicClass); 
这是行不通的。这个类没有任何包,那么如何实例化这个类呢

我只有MyDynamicClass.class文件,它在我的主文件夹中


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

我已经测试了带和不带软件包的情况,两种情况都很好

        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();
下面是课程

默认包:

在包com.test下

一旦有了类对象,就可以调用newInstance()来创建对象


你是如何编写你的课程的?能否确保存在.class文件?

可以尝试调试的步骤:

  • 检查您的类路径
    当您执行Class.forName(“MyDynamicClass”)时
    它在类路径中检查文件MyDynamicClass.class并加载它

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

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


  • 试试
    Class.forName(“MyDynamicClass”)
    抛出classnotfoundexception,MyDynamicClass.class保存在Package之外,
    class.forName(“packageName.MyDynamicClass”)这个类文件没有包名。我没有这个类的.java文件。只需要.class文件“C:\…\workspace\u java\Dynamictest\CrazyClassCreation.class”,在您的例子中,“MyDynamicClass”保存在名为“com.test”的侧包中,您可以看到import语句,“com.test.MyDynamicClass”和“MyDynamicClass”它们是一样的——一个是包“com.test”,另一个是“default”package.delete“Class clazz=Class.forName(“com.test.MyDynamicClass”);和“package com.test;”中的“com.test”,然后运行你的程序忘记一切,告诉我如何创建一个类文件的对象,我保存在“C:\MyDynamicClass.Class”中。我在运行时得到类文件,但我没有该类的.java文件;在我的例子中,“MyDynamicClass.class”是保存在somelocationURL myurl[]={newURL('file:///C:/Amal/file/web/“”,新URL(“)};URLClassLoader x=新URLClassLoader(myurl);Class c=x.loadClass(“MyDyamicClass”);Class getArg1[]={(新字符串[1])。getClass()};方法m=c.getMethod(“main”,getArg1);字符串[]my1={“arg1已传递”,“arg2已传递”};对象myarg1[]={my1};m.invoke(null,myarg1);没有类路径,它只是一个文件“MyDynamicClass.class”“保存在一个位置您应该将该目录附加到类路径中,然后再试一次。@Amal您可以用目录结构和执行的步骤更新您的问题吗?您的类路径设置是什么?”??签出“阿米尔·阿富汗尼”答案
    
    public class MyDynamicClass {
    
    }
    
    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