最近我收到了这个错误
Caught: java.lang.ClassFormatError: Illegal field modifier in class **** : 0x3
java.lang.ClassFormatError : Illegal field modifiers in class **** : 0x3
我知道原因,我一直在想 - 是否有一些错误代码表及其解释?因为我很好奇0x3
的含义。
答案 0 :(得分:4)
0x3是无效修饰符,在此上下文中具有矛盾含义。
字段不能同时包含public
和private
修饰符。
有效修饰符是
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
将是两个具有数值0x2
和0x1
的修饰符的OR。
0x2
修饰符表示ACC_PRIVATE
。 0x1
修饰符表示ACC_PUBLIC
。
这是一个矛盾 - 你不能拥有公共和私人的东西 - 所以0x3
是一个无效的修饰符组合。
类的字段可以设置表4.4中的任何标志。但是,类的特定字段最多可以设置一个ACC_PRIVATE,ACC_PROTECTED和ACC_PUBLIC标志......
因此,规范明确禁止设置ACC_PRIVATE
和ACC_PUBLIC
。