本文共 1086 字,大约阅读时间需要 3 分钟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class StaticTest { public static void main(String[] args){ staticFunection(); } static StaticTest st = new StaticTest(); static { System.out.println( "1" ); } { System.out.println( "2" ); } public StaticTest() { // TODO Auto-generated constructor stub System.out.println( "3" ); System.out.println( "a =" + a + ", b=" +b); } public static void staticFunection(){ System.out.println( "4" ); } int a = 110 ; static int b = 112 ; } |
3.类的初始化阶段需要做是执行类构造器(类构造器是编译器收集所有静态语句块和类变量的赋值语句按语句在源码中的顺序合并生成类构造器,对象的构造方法是init,类的构造方法是cinit,可以在堆栈信息中看到),因此先执行第一条静态变量的赋值语句即st = new StaticTest (),此时会进行对象的初始化,对象的初始化是先初始化成员变量再执行构造方法,因此打印2->设置a为110->执行构造方法(打印3,此时a已经赋值为110,但是b只是设置了默认值0,并未完成赋值动作),等对象的初始化完成后继续执行之前的类构造器的语句,接下来就不详细说了,按照语句在源码中的顺序执行即可;
附答案:
2
3 a=110,b=0 1 4
转载地址:http://wmzoi.baihongyu.com/