下面给你参考。
http://java-mzd.iteye.com/blog/838683这个为什么得问JVM设计时候怎么想的了
而且我觉得挺合理的。 嘿嘿。

解决方案 »

  1.   

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

  2.   

    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
      

  3.   

    请参考下这个链接吧,可能对你有帮助
    JAVA初始化顺序
      

  4.   

    建议看看<深入java虚拟机>一书关于类初始化的顺序
    4为什么在2前面?答:
    因为每个对象在堆中创建的时候,都要执行类的<init>方法来初始化对象,这个init方法执行如下三个步骤:
    1.如果有父类,则执行父类的init方法
    2.执行对象的初始化方法(直接给成员变量赋值,初始化块都在这阶段执行,谁放在前面就先执行谁)
    3.执行构造方法
      

  5.   

    参考下:http://topic.csdn.net/u/20090625/14/766E4863-9B61-4E09-A6A7-A51A07A3D20D.html
    http://wenwen.soso.com/z/q191435823.htm
      

  6.   

    class Paratrooper implements Runnable {   
    public void run() {     
    System.out.print(Thread.currentThread().getName() + " ");  
    }
    }   
    public class Jump {   
    static Paratrooper p;   
    static { 
    p = new Paratrooper(); 
    }   

    Thread t1 = new Thread(p, "bob"); 
    t1.start();

    Jump() { 
    Thread t2 = new Thread(p, "ted");
    t2.start(); 
    }    public static void main(String[] args) {  
    new Jump();   
    new Thread(new Runnable() { public void run()   { ; }}, "carol").start();   
    new Thread(new Paratrooper(), "alice").start();   
    }   } 
    请问各位大侠:
    这里的执行结果为什么是:
    ted bob alice