public class Home {
private static Home home = new Home();
private static int DEFAULT_NR_OF_ROOMS = 4;
private final int rooms;
public Home() {
rooms = DEFAULT_NR_OF_ROOMS - 1;
}
public static void main(String[] args) {
System.out.println(home.rooms);
}
}
为什么打印-1?
答案 0 :(得分:2)
答案-1
是对的,
如果您希望答案为3
,那么您的代码应为
private static int DEFAULT_NR_OF_ROOMS = 4;
private static Home home = new Home();
在第一种情况下回答-1
的原因是,当执行语句private static Home home = new Home();
时,DEFAULT_NR_OF_ROOMS
值未分配给4
,因为语句在构造函数之后线。因此,DEFAULT_NR_OF_ROOMS
具有int
0
值
答案 1 :(得分:0)
你错过了陈述的顺序。
当你写
private static Home home = new Home();
构造函数在语句之前调用
private static int DEFAULT_NR_OF_ROOMS = 4;
因此,在执行构造函数DEFAULT_NR_OF_ROOMS
时,值为0
。
public Home() {
rooms = DEFAULT_NR_OF_ROOMS - 1; // 0-1
}
要查看更改,请先分配值,然后调用构造函数
private static int DEFAULT_NR_OF_ROOMS = 4;
private static Home home = new Home();
答案 2 :(得分:0)
在将值赋给静态变量之前,您正在调用构造函数。 所以在构造函数代码中,没有静态变量的值。
将语句的序列换成
private static int DEFAULT_NR_OF_ROOMS = 4;
private static Home home = new Home();
然后你会得到3
的答案,就像调用构造函数时一样,静态变量已被赋值。