defineClass方法抛出java.lang.ClassFormatError:类文件中的魔术值1885430635不兼容

时间:2019-01-11 08:11:06

标签: java

我尝试了以下代码,但出现了异常。有人可以帮我吗

package defineClass;

import java.io.FileInputStream;
import java.io.IOException;

public class DefineClass extends ClassLoader {

    static String PATH = "E:\\WorkSpaceOpkey\\tester\\src\\test2\\Bar.java";

    public static void main(String[] m) throws IOException {
        FileInputStream fis = new FileInputStream(PATH);
        byte[] b = new byte[fis.available()];
        fis.read(b);
        new DefineClass().defineClass("test2.Bar", b, 0, b.length);
    }

}

我在定义类时出现以下错误

Exception in thread "main" java.lang.ClassFormatError: Incompatible magic 
value 1885430635 in class file test2/Bar
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.lang.ClassLoader.defineClass(ClassLoader.java:642)
at defineClass.DefineClass.main(DefineClass.java:14)

1 个答案:

答案 0 :(得分:0)

几乎不可能,因为类加载器会加载已编译的类:

  

将字节数组转换为Class类的实例,

您不能使用ClassLoader来加载一个Java 源代码文件。

如果要动态使用Java源代码,则必须先将该源代码编译为字节码,有关如何操作的信息,请参见here

当然,真正的答案是:不要只是假设。请务必阅读其相应的Java文档,并进行更多研究。有很多很好的资源详细解释了类加载器,例如here