Java的静态变量,成员变量,静态代码块,构造块的加载顺序


题目:

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调用方法

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM