gpt4 book ai didi

java - 为什么 "customised Enum constructor"返回所有其他 Enum 类型的信息?

转载 作者:行者123 更新时间:2023-12-02 00:33:54 24 4
gpt4 key购买 nike

enum TrafficSignal {

//this will call enum constructor with one String argument
RED("wait"),
GREEN("go"),
ORANGE("slow down");

private String action;

public String getAction() {
return this.action;
}

// enum constructor - can not be public or protected
TrafficSignal(String action){
this.action = action;
System.out.println(this.action);
}
}


public class EnumConstructorExample{

public static void main(String args[]) {

// Only one Enum object initialized/instaniated
TrafficSignal c1 = TrafficSignal.GREEN;
}
}

输出:

wait
go
slow down

我只是想知道为什么输出会给出所有其他枚举类型的信息,尽管我只初始化了一个枚举对象 (TrafficSignal.GREEN)。

最佳答案

类加载时自动实例化所有枚举对象

你说:

despite the fact I only initialized one enum object (TrafficSignal.GREEN).

不正确。您没有实例化枚举对象。

您访问了枚举类的现有对象。该对象在加载枚举类时被实例化。

事实上,所有枚举对象都在类加载时实例化。作为为每个常量名称实例化一个对象的一部分,会自动调用其构造函数。这一切都发生在加载枚举类时。所以这一切都发生在您的代码执行之前。必须先加载代码中使用的类,然后才能执行代码。因此,三个命名常量意味着构造函数被调用三次,每次在您获得对名为 GREEN 的常量引用的对象的访问权限之前打印 action 成员字段值。

关于java - 为什么 "customised Enum constructor"返回所有其他 Enum 类型的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61789709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com