Java面试题 静态变量 静态代码块 代码块面试
package statict;code
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();编译
}class
}变量
执行结果:方法
code
code
static
codestatic
解析:文件
静态代码块在执行过程当中是可使用静态变量的。co
在.class文件编译阶段,静态变量和静态代码块会按照语句出现的顺序拼接成一个类初始化方法,这个方法的执行也将完成静态变量的初始化和静态代码块的执行,所以会首先执行初始化对象s1,s2,执行普通代码块,输出code.。s1,s2初始化完成之后执行静态代码块代码,输出static。最后的code也是非静态代码块中输出的。
在以往的认知中,总认为静态代码块在类加载的时候首先执行,而忽略了静态变量的初始化是可能执行在静态代码块前面的。