我有一个关于枚举的问题(它可能是一个简单的但......).这是我的计划:
public class Hello { public enum MyEnum { ONE(1), TWO(2); private int value; private MyEnum(int value) { System.out.println("hello"); this.value = value; } public int getValue() { return value; } } public static void main(String[] args) { MyEnum e = MyEnum.ONE; } }
我的问题是:为什么输出是
hello hello
并不是
hello
?
代码如何"两次"到构造函数?第一次是什么时候,第二次是什么时候?为什么枚举构造函数不能公开?这是它打印两次而不是一次打印的原因吗?
代码如何"两次"到构造函数?
为枚举的每个元素调用Conctructor.很少改变你的示例来演示它:
public class Hello { public enum MyEnum { ONE(1), TWO(2); private int value; private MyEnum(int value) { this.value = value; System.out.println("hello "+this.value); } public int getValue() { return value; } } public static void main(String[] args) { MyEnum e = MyEnum.ONE; } }
输出:
hello 1 hello 2
枚举是单身人士和他们在班级的加载实例化-这样的两个"你好"来自instanciatingš MyEnum.ONE
和MyEnum.TWO
(只是尝试打印value
为好).
这也是构造函数不能公开的原因:Enum保证每个值只有一个实例 - 如果其他人可以使用构造函数则不能.