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
变量。明白了,谢谢:)