我正在Java中运行以下代码:
1)第一段代码:
输出为:静态变量的值为:20
2)第二段代码:
输出为:
1)第一段代码:
public class Basic {
static int a=10;
static
{
a=20;
}
public static void main(String args[])
{
System.out.println("Value of Static variable : "+Basic.a);
}
}
输出为:静态变量的值为:20
2)第二段代码:
public class Basic {
static
{
a=20;
}
static int a=10;
public static void main(String args[])
{
System.out.println("Value of Static variable : "+Basic.a);
}
}
输出为:
输出结果:静态变量的值为:10
问题:我不明白为什么第二段代码的输出结果与第一段代码不同,因为当 JVM 运行静态块时,它会在 main 方法之前运行。在第一段代码中,静态块将在 main 方法之前运行,然后重新分配变量 a 的值为 20。但是,在第二段代码中,我在块之前初始化了变量 'a',并且当程序运行时变量 'a' 应该具有值 20,但它的值是 10,为什么?