天天看点

java静态变量静态代码块,Java面试题 静态变量 静态代码块 代码块

Java面试题 静态变量 静态代码块 代码块

package statict;

public class StaticTest {

public static StaticTest s1 = new StaticTest();

public static StaticTest s2 = new StaticTest();

{

System.out.println("code");

}

static{

System.out.println("static");

}

public static void main(String[] args) {

new StaticTest();

}

}

执行结果:

code

code

static

code

解析:

静态代码块在执行过程中是可以使用静态变量的。

在.class文件编译阶段,静态变量和静态代码块会按照语句出现的顺序拼接成一个类初始化方法,这个方法的执行也将完成静态变量的初始化和静态代码块的执行,因此会首先执行初始化对象s1,s2,执行普通代码块,输出code.。s1,s2初始化完成以后执行静态代码块代码,输出static。最后的code也是非静态代码块中输出的。

在以往的认知中,总认为静态代码块在类加载的时候首先执行,而忽略了静态变量的初始化是可能执行在静态代码块前面的。