最近我遇到了这个错误
Caught: java.lang.ClassFormatError: Illegal field modifier in class **** : 0x3
java.lang.ClassFormatError : Illegal field modifiers in class **** : 0x3
我知道原因,我一直想知道 - 是否有这些错误代码及其解释的表格?因为我很好奇0x3
是什么意思。
最佳答案
字段修饰符是有效修饰符的按位或。每个有效的修饰符(其中一些显示在 @gustf 的答案中)都是具有单个位设置的整数。
因此,0x3
将是两个具有数值 0x2
和 0x1
的修饰符的 OR。
0x2
修饰符表示 ACC_PRIVATE
。 0x1
修饰符表示 ACC_PUBLIC
。
这是一个矛盾 - 你不能同时拥有公共(public)和私有(private)的东西 - 因此 0x3
是无效的修饰符组合。
Section 4.5 of the JVM spec 中描述了此行为:
Fields of classes may set any of the flags in Table 4.4. However, a specific field of a class may have at most one of its ACC_PRIVATE, ACC_PROTECTED, and ACC_PUBLIC flags set ...
因此,规范明确禁止设置 ACC_PRIVATE
和 ACC_PUBLIC
。
关于java - `java.lang.ClassFormatError` 错误代码列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270028/