我有一个类文件,当我在网站上时,会出现以下消息:
类别文件“spectrum”中不兼容的魔术值1768713317。
这个神奇的价值是什么意思?请帮助:)
答案 0 :(得分:10)
.class
文件的前四个字节(已编译的Java二进制文件)应该是0xCAFEBABE
- 所谓的魔术值。
在您的情况下,这些是ASCII中的1768713317
或0x696C6C65
或"ille"
( ille ... gal ?)。很可能一些JVM试图打开一个文件,认为这是字节码,而它实际上是一个文本文件。也许可以下载类,但服务器会返回一些错误?
答案 1 :(得分:5)
Magic number是每个编译的Java类中的前4个字节。这是已编译的Java类的结构:
ClassFile {
u4 magic;
u2 minor_version;
u2 major_version;
u2 constant_pool_count;
cp_info constant_pool[constant_pool_count-1];
u2 access_flags;
u2 this_class;
u2 super_class;
u2 interfaces_count;
u2 interfaces[interfaces_count];
u2 fields_count;
field_info fields[fields_count];
u2 methods_count;
method_info methods[methods_count];
u2 attributes_count;
attribute_info attributes[attributes_count];
}
'magic'应始终等于:0xCAFEBABE
。它告诉JVM:“嘿,你!我是一个Java类,你可以执行我的代码!”。当JVM读取文件且幻数无效时,它将不执行它。