同一类中实例化多个实例

21 浏览
0 Comments

同一类中实例化多个实例

这个问题已经有答案了

“static”关键字在类中是干什么的?

能有人解释一下下面的代码为什么没有异常吗?我认为当为“星期日”创建新实例时,它也会在“星期日”内部创建新实例,然后再次创建“星期日”(在“星期一”内部),以此类推...类似于递归,因为它们都是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日
0
0 Comments

SUNDAYMONDAYstatic变量。这意味着它们是类变量。类Week的对象将没有名为SUNDAYMONDAY的属性。

您可以在此处查看有关static的更多信息:什么是类中的'static'关键字?

0
0 Comments

SUNDAYMONDAY是实例变量(非静态)时,您会看到上述行为。

由于您将它们声明为静态变量,它们是类的属性,并在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);
    }
}

0