题目:
public class StaticTest{
static StaticTest st = new StaticTest();
public static void staticFunction(){
System.out.println("4");
}
static{
System.out.println("1");
}
StaticTest(){
System.out.println("3");
System.out.println("a="+a+" b="+b);
}
int a=100;
static int b=112;
{
System.out.println("2");
}
public static void main(String args[]){
staticFunction();
}
}
执行结果:
分析:
类的生命周期是:加载->验证->准备->解析->初始化->使用->卸载
准备和初始化阶段涉及类变量的初始化和赋值
准备阶段:为static类变量分配内存并设置默认值,st = null b = 0
初始化阶段:
执行类构造器
先按顺序执行静态变量,static StaticTest st = new StaticTest();
然后会执行StaticTest()方法,执行前先执行构造代码块再初始化成员变量,所以先输出2,a=100,b由于已经初始化完毕,不执行
执行StaticTest()中的输出3,,a=100,b=0
StaticTest()执行完之后,顺序执行static代码块,输出1
main中调用staticfunction 输出4
|—>执行构造代码块->初始化成员变量-|
执行static变量初始化->执行静态变量->执行方法->继续执行static代码块->main调用方法