静态属性、静态代码块以及构造代码块的执行先后顺序
最近遇到一道Java先后调用的题(下图),程序中输出A.x和B.y的值。
如图,输出1,2。 那么是为什么呢
从主函数开始,载入A类,A类具有静态属性和静态代码块,而静态属性和静态代码块是按顺序执行,哪个在前面就先执行哪个,所以x被赋初值为0
再执行静态代码块,此时调用B类,静态属性y并未赋值而是被JVM赋了初值0,因此此时x=1,y=0.并输出“静态代码块被调用”
下一步主函数创建了A类的对象,构造代码块被调用并输出,下一步输出B.y,y被赋值 y=A.x + 1 = 1+1=2. 最后输出1和2.