Java中的初始化顺序

5

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

假设有以下代码:

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如何在这里被看到,而又没有与其值一起被看到。这是否与编译时和运行时有关?谢谢。


1
请查看JLS - assylias
3个回答

7
当你在Java中创建一个int时,它会自动初始化为0。所以第二段代码的作用是创建两个int,将它们都设置为0,然后将y设置为x的值(即0),然后将x设置为值42

2

int 的默认值为 0。


1

因此,在编译时,编译器正在生成指令来为x和y分配空间(内存)并将它们的值设置为0

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接