defineClass 方法抛出 java.lang.ClassFormatError:

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


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)


慕村9548890
浏览 262回答 1
1回答

繁星点点滴滴

根本不可能,因为类加载器会加载已编译的类:将字节数组转换为 Class 类的实例,您不能使用 ClassLoader加载java源代码文件。如果要动态使用 java 源代码,则必须先将该源代码编译为字节码,有关如何执行此操作的选项,请参见此处。真正的答案当然是:不要只假设类做什么。总是阅读他们相应的 java doc,并做更多的研究。有很多很好的资源可以详细解释类加载器,比如这里。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java