如果我有以下代码:
public class Test {
private int x = 5;
private static int y = 5;
public Test() {
x = 10;
y = 10;
}
}
我想知道在这两种情况下它实际上会首先分配 5,然后用 10 更新它,换句话说,没有必要在内联和构造函数中初始化变量,因为它实际上具有初始化变量两次的效果?或者在 x (作为实例字段)的情况下,它是否只是将 x = 5 替换为 x = 10,因此甚至只运行 x = 10?
如果能知道反编译版本就好了。
最佳答案
I'm wondering in both cases will it actually initially assign 5, and then update this with 10
是的。构造函数将:
- 调用
super()
。 - 执行任何内联初始化和匿名初始化 block 。
- 执行构造函数的其余部分。
这在 JLS #12.5-6 中有更详细的说明。 .
关于Java 构造函数与内联字段初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35421411/