Java 从内部实例化类的多个实例

Java 从内部实例化类的多个实例,java,enums,Java,Enums,有人能解释一下下面的代码是如何工作的吗。我在想,当为星期天创建新实例时,它也会为星期一(星期天内)创建一个新实例,然后再为星期天(星期一内)创建一个新实例,以此类推。。。类似递归的东西,因为它们都是课程周的一部分。但我的理解是错误的,因为下面的代码运行良好 public class Week { public static final Week SUNDAY = new Week("SUNDAY",0); public static final Week MONDAY = new

有人能解释一下下面的代码是如何工作的吗。我在想,当为星期天创建新实例时,它也会为星期一(星期天内)创建一个新实例,然后再为星期天(星期一内)创建一个新实例,以此类推。。。类似递归的东西,因为它们都是课程周的一部分。但我的理解是错误的,因为下面的代码运行良好

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枚举时,我产生了这个疑问。

SUNDAY
SUNDAY
静态变量。这意味着它们是类变量。类
Week
的对象将不具有名为
SUNDAY
MONDAY


您可以在此处获得有关
static
的更多信息:

SUNDAY
SUNDAY
是实例变量(非静态)时,您将看到提到的行为

由于您已将它们声明为静态,因此这些是类的属性,并在相继加载
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);
    }
}

System.out.println(Week.SUNDAY.MONDAY)
工作正常,因为类变量可以通过ClassName.staticVariable或classInstance.staticVariable访问?是的,当声明为
static
时,这些
class
变量可以作为
class.variable
instance.variable
(没有区别)。但是,您应该以
Class.variable
的形式访问
static
变量。明白了,谢谢:)