Java中初始化的顺序

时间:2012-03-25 23:39:30

标签: java

我知道,这是一个非常基本的话题,所以如果是重复的问题,请提供参考。

说,有以下代码:

public class Point {

    int x = 42;
    int y = getX();

    int getX() { 
        return x; 
    }

    public static void main (String s[]) {
        Point p = new Point();
        System.out.println(p.x + "," + p.y);
    }
} 

输出:42,42

但是如果我们改变变量外观的顺序:

public class Point {

    int y = getX();
    int x = 42;

    int getX() { 
        return x; 
    }

    public static void main (String s[]) {
        Point p = new Point();
        System.out.println(p.x + "," + p.y);
    }
} 

输出:42,0

据我所知,在第二种情况下,情况可以描述为:“好的,我不知道返回的x值是什么,但是有一些价值”。我不完全理解的是,在没有看到x及其价值的情况下,可以看到x。这是编译时间和运行时间的问题吗?提前谢谢。

3 个答案:

答案 0 :(得分:7)

在Java中创建int时,它会自动初始化为0。那么第二个代码的作用是创建两个整数xy将它们都设置为0,然后将y设置为x的值0 42然后将x设置为值{{1}}。

答案 1 :(得分:2)

int的默认值为0。

答案 2 :(得分:1)

因此,在编译时,编译器正在生成指令,为x和y留出空间(内存)并将其值设置为0

在运行时,JVM填充Point对象(为其分配内存)并为x和y分配内存和初始值0。

然后,运行时初始化代码开始执行并将y设置为0,然后将x设置为42(在第二种情况下)