我們通過案例來深化java中代碼的運行順序。
public class App {
? private static App d = new App();
? private SubClass t = new SubClass();
? static {
? ? System.out.println(3);
? }
? public App() {
? ? System.out.println(4);
? }
? public static void main(String[] args) {
? ? System.out.println("Hello");
? }
}
class SuperClass {
? SuperClass() {
? ? System.out.println("構造SuperClass");
? }
}
class SubClass extends SuperClass {
? static {
? ? System.out.println(1);
? }
? public SubClass() {
? ? System.out.println(2);
? }
}
以上代碼執(zhí)行結果為:
1)1----App類依賴于SubClass類,所以會先把SubClass類的字節(jié)碼加載進JVM
2)構造SuperClass----會先調(diào)用父類的構造器
3)2----非static字段的初始化其實就在構造器中,會優(yōu)先構造器的其他語句執(zhí)行的
4)4----然后調(diào)用App的構造器
5)3----加載App的靜態(tài)資源
6)Hello----運行主方法