为什么defineClass()中的classLoader魔术值会抛出异常?

时间:2011-10-13 10:46:19

标签: java runtime-error classloader custom-attributes custom-component

我想编写一个classLoader,它可以帮助我在运行时实现自定义类,最终实现整个组件。现在我正在加载课程。

我正在尝试加载此role.java文件。但是,当我到达这部分代码时:

myClass = super.defineClass(className, classData, 0, classData.length);

我得到了这个例外:

  

线程“main”中的异常java.lang.ClassFormatError:类文件C:\ Users \ ARIFAH \ Downloads \ Compressed \ eUML2免费版\具有classLoader代码\ 2 \中不兼容的魔术值 1885430635 archetypedComponentWithNull \ SRC \徒\角色/ JAVA

at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at customCL.customClassLoader.loadClass(customClassLoader.java:116)
at java.lang.ClassLoader.loadClass(Unknown Source)
at customCL.customClassLoader.main(customClassLoader.java:145)

我读过帖子说“你需要像OSGi这样的东西”。这类似于从零开始处理新事物,我想避免这种情况。

为什么我收到此错误?

1 个答案:

答案 0 :(得分:1)

您实际上并未加载真正的类文件。任何有效类文件的神奇值都是0xCAFEBABE,这个十六进制的魔法是0x7061636B

请注意,如果我们逐字节地将0x7061636B转换为ASCII,则结果是字符串“pack”。这意味着您认为是类文件的文件实际上以字符串“pack”开头。