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并加载它
这将帮助您确定在修复类路径问题后如何搜索和加载此类
试试
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