之前看過一篇文章說的就是這個順序問題,importNew上面的,找了找没找到。类加载都是先加载父类的static属性和块,然后加载本身的static属性和块,顺序都是从上往下的。构造对象的时候,总是先调用父类的构造器,然后调用自身的构造器。你上面的例子,首先加载App类,谁想它第一个static属性竟然需要构造一个自身类型的对象,这就直接跳过其他static属性和块到了App的构造器了,构造器里本身就一句要打印一个4,但是程序在编译后会把SubClass t = new SubClass();加入到构造器上方的,这个你可以查看一下编译生成的字节码文件,然后转而去加载和构造SubClass對象,順序上面都說了。
之前看過一篇文章說的就是這個順序問題,
importNew
上面的,找了找没找到。类加载都是先加载父类的static
属性和块,然后加载本身的static属性和块,顺序都是从上往下的。构造对象的时候,总是先调用父类的构造器,然后调用自身的构造器。你上面的例子,首先加载App
类,谁想它第一个static
属性竟然需要构造一个自身类型的对象,这就直接跳过其他static
属性和块到了App
的构造器了,构造器里本身就一句要打印一个4
,但是程序在编译后会把SubClass t = new SubClass();
加入到构造器上方的,这个你可以查看一下编译生成的字节码文件,然后转而去加载和构造SubClass
對象,順序上面都說了。你會不會斷點調試呢? 可以使用eclipse的斷點 偵錯就可以看到程式碼的執行順序 和資料的快照