我想编写一个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这样的东西”。这类似于从零开始处理新事物,我想避免这种情况。
为什么我收到此错误?
答案 0 :(得分:1)
您实际上并未加载真正的类文件。任何有效类文件的神奇值都是0xCAFEBABE
,这个十六进制的魔法是0x7061636B
。
请注意,如果我们逐字节地将0x7061636B
转换为ASCII,则结果是字符串“pack”。这意味着您认为是类文件的文件实际上以字符串“pack”开头。