当前位置: 代码迷 >> J2SE >> Java Static 跟 构造方法 和 默认{}执行顺序
  详细解决方案

Java Static 跟 构造方法 和 默认{}执行顺序

热度:4754   发布时间:2013-02-25 00:00:00.0
Java Static 和 构造方法 和 默认{}执行顺序
Java code
package mysql;public class Test extends Test1 {    static{        System.out.print("3");    }    {        System.out.print("1");    }    Test() {        System.out.print("2");    }    {        System.out.print("4");    }    public static void main(String[] args) {        new Test();    }}


Java code
package mysql;public class Test1 {    Test1() {        System.out.print("5");    }    static {        System.out.print("6");    }}



Java code
执行顺序是:635142


4为什么会在2前面。

------解决方案--------------------------------------------------------
下面给你参考。
http://java-mzd.iteye.com/blog/838683

这个为什么得问JVM设计时候怎么想的了。。。
而且我觉得挺合理的。 嘿嘿。
------解决方案--------------------------------------------------------
初始化顺序就是这样的. (每一层)构造方法是最后执行的.
------解决方案--------------------------------------------------------
1、进入 启动类 Test 的main
2、因为 Test extends Test1,所以加载 Test1,加载时先 执行static部分的代码 ,加载完 Test1;
6
3、接着加载 Test,执行Test的static部分的代码
3
4、new Test() ,需要先初始化 Test1的非static部分代码 即类定义中{}中的代码,因为没有{}部分代码,所以执行构造函数
5
5、接着执行Test的非static部分代码即类定义中{}中的代码,从类定义由上往下

1
4
6、执行Test的构造函数
2

所以顺序:635142
------解决方案--------------------------------------------------------
请参考下这个链接吧,可能对你有帮助
JAVA初始化顺序
------解决方案--------------------------------------------------------
建议看看<深入java虚拟机>一书关于类初始化的顺序
4为什么在2前面?

答:
因为每个对象在堆中创建的时候,都要执行类的<init>方法来初始化对象,这个init方法执行如下三个步骤:
1.如果有父类,则执行父类的init方法
2.执行对象的初始化方法(直接给成员变量赋值,初始化块都在这阶段执行,谁放在前面就先执行谁)
3.执行构造方法
------解决方案--------------------------------------------------------
探讨

引用:

初始化顺序就是这样的. (每一层)构造方法是最后执行的.

你能把JVM的执行顺序贴出来吗?

------解决方案--------------------------------------------------------
没静态的代码块也会被执行
  相关解决方案