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(在第二种情况下)检查