实例化子类时,父类与子类中的静态代码块、实例代码块、静态变量、实例变量、构造函数的执行顺序是怎样的?
代码执行的优先级为:
firest:静态部分
second:实例化过程
详细顺序为:
1.父类静态代码块与父类静态变量(取决于代码书写顺序)
2.子类静态代码块与子类静态变量(取决于代码书写顺序)
3.父类实例变量与父类代码块(取决于代码书写顺序)
4.父类构造函数
5.子类实例变量与父类代码块(取决于代码书写顺序)
6.子类构造函数
在JVM加载完类以后,类在被使用的时候初始化,静态部分只在类初始化的时候执行一次。
测试代码:
[java]view plaincopy classFather{Father(){LogUtil.log(System.currentTimeMillis()+"------父类构造函数");}static{LogUtil.log(System.currentTimeMillis()+"------父类静态代码块");}longx=getTime("------父类实例变量");{longtime=System.currentTimeMillis();LogUtil.log(time+"------父类代码块");}staticlongy=getTime("------父类静态变量");staticlonggetTime(Stringwho){longtime=System.currentTimeMillis();LogUtil.log(time+who);returntime;}}classChildextendsFather{Child(){LogUtil.log(System.currentTimeMillis()+"------子类构造函数");}staticlongy=getTime("------子类静态变量");static{LogUtil.log(System.currentTimeMillis()+"------子类静态代码块");}{longtime=System.currentTimeMillis();LogUtil.log(time+"------子类代码块");}longx=getTime("------子类实例变量");staticlonggetTime(Stringwho){longtime=System.currentTimeMillis();LogUtil.log(time+who);returntime;}}
调用代码:
[java]view plaincopy newThread(newRunnable(){@Overridepublicvoidrun(){newChild();LogUtil.log("分隔符------分隔符");newChild();}}).start();
执行结果:
[plain]view plaincopy 11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类静态代码块11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类静态变量11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------子类静态变量11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------子类静态代码块11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类实例变量11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类代码块11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类构造函数11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------子类代码块11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------子类实例变量11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------子类构造函数11-0320:02:03.3507533-7881/?E/AKADDEMO:分隔符------分隔符11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类实例变量11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类代码块11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523353------父类构造函数11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523354------子类代码块11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523354------子类实例变量11-0320:02:03.3507533-7881/?E/AKADDEMO:1478174523354------子类构造函数