程序打印-1

时间:2013-12-04 13:25:27

标签: java

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?

3 个答案:

答案 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的答案,就像调用构造函数时一样,静态变量已被赋值。