Sha*_*wal 4 java instance-variables initialization-block
在我之前的问题Java 类和静态块的上下文中,如果我将代码从静态块和变量更改为正常的实例初始化块和实例变量会怎样。现在代码将如何执行?
class extra3 {
public static void main(String string[]) {
Hello123 h = new Hello123();
System.out.println(h.a);
}
}
class Hello123 {
{
a=20;
}
int a=158;
}
Run Code Online (Sandbox Code Playgroud)
这里我得到的输出为 158。我无法理解这里的原因。其他代码是这样的:
class extra3 {
public static void main(String string[]) {
Hello123 h = new Hello123();
System.out.println(h.a);
}
}
class Hello123 {
int a=158;
{
a=20;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的输出是 20,这是可以接受的,因为创建对象时首先执行实例块。但是为什么第一个代码的输出是 158 呢?
这是初始化的顺序
因此,当您初始化字段时,内联初始化程序 ( a = 158) 和初始化块 ( a = 20) 都会按照它们定义的顺序执行。
因此,在第一种情况下,内联初始化程序在初始化块之后执行,您将得到 158 作为结果。
在第二种情况下,初始化块在内联初始化程序之后执行。
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |