簡體   English   中英

`java.lang.ClassFormatError`錯誤代碼列表

[英]`java.lang.ClassFormatError` list of error codes

最近我收到此錯誤

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

我一直想知道我的原因-這些錯誤代碼及其解釋的表格是否存在? 因為我很好奇0x3是什么意思。

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

您可以在這里閱讀更多有關它們的信息

字段修飾符是有效修飾符的按位或。 每個有效的修飾符(其中一些在@gustf的答案中顯示)都是設置了一位的整數。

因此, 0x3將是兩個數值為0x20x1修飾符的或。

0x2修飾符表示ACC_PRIVATE 0x1修飾符表示ACC_PUBLIC

這是一個矛盾-您不能同時擁有公共和私人的東西-因此0x3是修飾符的無效組合。

JVM規范的4.5節中描述了此行為:

類的字段可以設置表4.4中的任何標志。 但是,類的特定字段最多可以設置其ACC_PRIVATE,ACC_PROTECTED和ACC_PUBLIC標志之一。

因此,規范明確禁止設置ACC_PRIVATEACC_PUBLIC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM