`java.lang.ClassFormatError`错误代码列表

时间:2016-03-28 19:54:19

标签: java

最近我收到了这个错误

Caught: java.lang.ClassFormatError: Illegal field modifier in class **** : 0x3
java.lang.ClassFormatError : Illegal field modifiers in class **** : 0x3

我知道原因,我一直在想 - 是否有一些错误代码表及其解释?因为我很好奇0x3的含义。

2 个答案:

答案 0 :(得分:4)

0x3是无效修饰符,在此上下文中具有矛盾含义。

字段不能同时包含publicprivate修饰符。

有效修饰符是

ACC_PUBLIC      0x0001
ACC_PRIVATE     0x0002
ACC_PROTECTED   0x0004
ACC_STATIC      0x0008
ACC_FINAL       0x0010
ACC_VOLATILE    0x0040
ACC_TRANSIENT   0x0080  
ACC_SYNTHETIC   0x1000
ACC_ENUM        0x4000

您可以详细了解{{3}}

答案 1 :(得分:4)

字段修饰符是有效修饰符的按位OR。每个有效修饰符(其中一些在@ gustf'答案中显示)是设置了单个位的整数。

因此,0x3将是两个具有数值0x20x1的修饰符的OR。

0x2修饰符表示ACC_PRIVATE0x1修饰符表示ACC_PUBLIC

这是一个矛盾 - 你不能拥有公共和私人的东西 - 所以0x3是一个无效的修饰符组合。

Section 4.5 of the JVM spec

中描述了此行为
  

类的字段可以设置表4.4中的任何标志。但是,类的特定字段最多可以设置一个ACC_PRIVATE,ACC_PROTECTED和ACC_PUBLIC标志......

因此,规范明确禁止设置ACC_PRIVATEACC_PUBLIC