Java 为什么必须在枚举类型中声明任何其他变量和方法之前声明枚举常量?

Java 为什么必须在枚举类型中声明任何其他变量和方法之前声明枚举常量?,java,syntax,enums,Java,Syntax,Enums,如果我在声明枚举常量之前或未声明枚举常量时声明变量,请执行以下操作: enum MyEnum { int i = 90; } 它显示以下编译错误 MyEnum.java:3: <identifier> expected { ^ MyEnum.java:4: ',', '}', or ';' expected int i = 90; ^ MyEnum.java:4: '}' expected int i = 90;

如果我在声明枚举常量之前或未声明枚举常量时声明变量,请执行以下操作:

enum MyEnum
{
    int i = 90;
}
它显示以下编译错误

MyEnum.java:3: <identifier> expected
{
 ^
MyEnum.java:4: ',', '}', or ';' expected
        int i = 90;
        ^
MyEnum.java:4: '}' expected
        int i = 90;
             ^
MyEnum.java:5: class, interface, or enum expected
}
^
4 errors

为什么java enum是这样设计的?

代码表示枚举标识符列表的结尾。显然,您可以有一个空的枚举列表,但必须有一个

见下列文件之一:

8.9.1枚举常量
枚举类型的主体可能包含枚举常量


enum的两个强制性部分是:

  • 枚举标识符
  • 枚举体
  • 您必须首先声明枚举标识符列表,然后再声明枚举体
    这里,
    显示第一部分,因为第一部分是必需的。如果忽略这一点,将产生编译错误。如果您添加
    然后它将在您满足这两个标准时编译,特别是:
    EnumBodyDeclarations:;ClassBodyDeclarationsopt
    Thnx,用于快速响应和到JLS的相关链接。是的,我通过了那个链接。但我找不到java中Enum的这种设计约束的原因。因此,最后应该假设这只是java选择的设计枚举的方式?没有其他原因,比如:JVM在加载、初始化或任何其他方面对待枚举的方式……首先也是最重要的是,
    enum
    被设计为枚举超过零个元素。此设计完全有效。因为必须至少有一个枚举常量。因为这是Java语言规范中定义语法的方式。因为@EJP,但在后面的例子中,我没有声明任何枚举常量,只是在声明变量之前附加了一个分号。一个
    Enum
    应该至少有一个Enum常量,这是否违背了规定?这意味着没有Enum常量。编译器需要一种方法来知道枚举常量在哪里停止,其他东西在哪里开始。这就是语言设计师的选择。@EJP谢谢。这就是我想知道的……这是纯语言设计师的选择。。
    enum MyEnum
    {
        ;//put a semicolon
        int i = 90;
    }