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.执行构造方法
------解决方案--------------------
------解决方案--------------------没静态的代码块也会被执行