枚举实例后括号中的数字

8 java enums constructor

我正在读一本关于编程的书,我遇到了这样的事情:

public static enum Month {
JANUARY(1),
FEBRUARY(2),
MARCH(3),
APRIL(4),
MAY(5),
JUNE(6),
JULY(7),
AUGUST(8),
SEPTEMBER(9),
OCTOBER(10),
NOVEMBER(11),
DECEMBER(12);
Month(int index) {
this.index = index;
}
Run Code Online (Sandbox Code Playgroud)

枚举实例后括号中的数字是什么意思?它是一个枚举构造函数吗?

dav*_*xxx 6

枚举实例后括号中的数字是什么意思?它是一个枚举构造函数吗?

JANUARY(1),FEBRUARY(2)等等...确实是枚举构造函数.

但是在枚举中指定构造函数不需要数字.在这里你有一个数字,但它可以是任何其他的,它也可以有所需的参数.

请注意,实际上枚举声明错过了该index字段,无法编译.
这是正确的:

public static enum Month {
    JANUARY(1),
    FEBRUARY(2),
    MARCH(3),
    APRIL(4),
    MAY(5),
    JUNE(6),
    JULY(7),
    AUGUST(8),
    SEPTEMBER(9),
    OCTOBER(10),
    NOVEMBER(11),
    DECEMBER(12);

    private int index;

    Month(int index) {
        this.index = index;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想补充一点,枚举最重要的是一个类.因此,每个枚举值(此处JANUARY,FEBRUARY...)将通过调用类构造函数进行实例化.
对于任何类,由于您没有定义构造函数,编译器将生成一个没有arg的默认值.
所以它是有效的:

public static enum Fruit {
    APPLE(),
    ORANGE();       

    Fruit() {
    }
}
Run Code Online (Sandbox Code Playgroud)

这也是有效的:

public static enum Fruit {
    APPLE(),
    ORANGE();       
}
Run Code Online (Sandbox Code Playgroud)

但是对于构造函数中没有arg的枚举,我们通常使用为枚举保留的这种方便的语法:

public static enum Fruit {
    APPLE,  // with no parenthesis
    ORANGE; // with no parenthesis  
}
Run Code Online (Sandbox Code Playgroud)


And*_*res 5

这是每个枚举值调用的构造函数:

Month(int index) {
this.index = index;
}
Run Code Online (Sandbox Code Playgroud)