Java中的初始化顺序

Java中的初始化顺序,java,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(

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

比如,有以下代码:

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在这里是如何被看到的,而不是它的值。这是编译时和运行时的问题吗?提前感谢。

在Java中创建
int
时,它会自动初始化为
0
。因此,第二个代码所做的是创建两个整数
x
y
将它们都设置为
0
,然后将
y
设置为
x
的值,即
0
,然后将x设置为
42

int
将0作为默认值。

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

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

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

检查