同一类中实例化多个实例
同一类中实例化多个实例
这个问题已经有答案了:
能有人解释一下下面的代码为什么没有异常吗?我认为当为“星期日”创建新实例时,它也会在“星期日”内部创建新实例,然后再次创建“星期日”(在“星期一”内部),以此类推...类似于递归,因为它们都是Week类的一部分。但是我的理解是错误的,因为下面的代码可以正常工作。
public class Week { public static final Week SUNDAY = new Week("SUNDAY",0); public static final Week MONDAY = new Week("MONDAY",1); private String name; private int val; private Week(String name, int val) { this.name = name; this.val = val; } public int getIndex() { return this.val; } @Override public String toString() { return this.name; } }
当我阅读Java枚举时,我产生了这个疑惑。
admin 更改状态以发布 2023年5月23日
SUNDAY
和MONDAY
是static
变量。这意味着它们是类变量。类Week
的对象将没有名为SUNDAY
和MONDAY
的属性。
您可以在此处查看有关static
的更多信息:什么是类中的'static'关键字?
当SUNDAY
和MONDAY
是实例变量(非静态)时,您会看到上述行为。
由于您将它们声明为静态变量,它们是类的属性,并在Week
类逐一加载时进行初始化。一个对象创建SUNDAY
将不包含其中的MONDAY
,反之亦然。
正如我一开始提到的,下面的代码将无法成功运行,因为它将尝试递归地创建实例而没有结束。
public class Week { public final Week SUNDAY = new Week("SUNDAY",0); public final Week MONDAY = new Week("MONDAY",1); private String name; private int val; private Week(String name, int val) { this.name = name; this.val = val; } public int getIndex() { return this.val; } @Override public String toString() { return this.name; } public static void main(String[] args) { new Week("TUESDAY", 2); } }