执行时间(快到慢):static{}(静态代码块)--》{}(构造代码块)-》构造函数

解决方案 »

  1.   

    构造代码块中的代码也是在构造方法中执行的。在编译时的编译器看来会默认将构造代码块中的代码移动到构造方法中,并且移动到构造方法内容的前面。public class TestCode {

    public TestCode() {
    System.out.println("构造方法");
    }

    {
    System.out.println("代码块");
    }

    public static void main(String[] args) {
    new TestCode();
    }
    }相当于public class TestCode {

    public TestCode() {
    System.out.println("代码块");
    System.out.println("构造方法");
    }

    public static void main(String[] args) {
    new TestCode();
    }
    }你记住了这一点,以后在做很多关于用构造方法或代码块赋值的问题就明白了。
      

  2.   

    介绍你两个反编译软件,XJad,DJ Java Decompiler,发现构造代码块被移到构造方法中了,还有很多字符串操作,常量,等等,编译优化过的东西,通过反编译看代码,可以帮你理解过程,代码基本一样,不会反编译就和原来代码差很多,还可以看每行代码的指令,如果你了解java代码的指令集,你甚至可以不用写class,自己生产byte数组,在根据byte数组加载完全你自己设计的class类,百度搜一下,asm,cglib等
      

  3.   

    我觉得当你问这样一个问题的时候、你果断应该是打开eclipse,然后敲上10几行代码,然后运行,答案就出来了。
      

  4.   

    就知道人们会说让你写个demo做实验,嗯,这也是我要说的……
      

  5.   

    附上一段 java编程思想的例子
    java编程思想(第四版)130页 5.7.4非静态实例初始化。package initialization;//: initialization/Mugs.java
    // Java "Instance Initialization."
    import static net.mindview.util.Print.*;class Mug {
    Mug(int er) {
    print("Mug(" + er + ")");
    } void f(int er) {
    print("f(" + er + ")");
    }
    }public class Mugs {
    Mug mug1;
    Mug mug2;
    {
    mug1 = new Mug(1);
    mug2 = new Mug(2);
    print("mug1 & mug2 initialized");
    } Mugs() {
    print("Mugs()");
    } Mugs(int i) {
    print("Mugs(int)");
    } public static void main(String[] args) {
    print("Inside main()");
    new Mugs();
    // print("new Mugs() completed");
    // new Mugs(1);
    // print("new Mugs(1) completed");
    }
      

  6.   

    我们都管这叫静态代码块,你们都说构造代码块,太不尼妈专业了public static void run(){}
      

  7.   

    静态代码块执行顺序 > 父类构造方法执行顺序
    静态代码块执行顺序 > 父类局部代码块执行顺序
    静态代码块执行顺序 < 父类静态代码块执行顺序
    局部代码块执行顺序 < 父类构造方法执行顺序
      

  8.   

    父类静态变量----->子类静态变量---->初始化父类变量(按顺序)--->父类构造函数---->子类变量初始初始(按顺序)--->子类构造函数--->运行main后的语句--->程序结束。(按eclipse得debug顺序记录)
      

  9.   

    静态代码快优先执行,在new出对象之前,就已经执行了。
      

  10.   

    父类静态变量----->子类静态变量---->运行main后的语句(如果有new对象语句)--->初始化父类变量(按顺序)--->父类构造函数---->子类变量初始初始(按顺序)--->子类构造函数--->程序结束。