Tidak berguna untuk mengatakan lebih lanjut. Berikut adalah kod yang saya uji secara peribadi, yang jelas sekali imbas:
1 package test1; 2 3 public class Test { 4 public static void main(String[] argc) { 5 new Child(); 6 System.out.println("================================"); 7 new Child(); 8 } 9 } 10 11 class Child extends Parent{ 12 private static String staticField = getStaticField(); 13 static { 14 System.out.println("child静态方法块初始化"); 15 } 16 private String field = getField(); 17 { 18 System.out.println("child普通方法块初始化"); 19 } 20 21 public Child() { 22 System.out.println("child构造函数初始化"); 23 } 24 25 public static String getStaticField() { 26 System.out.println("child静态属性初始化"); 27 return "staticField"; 28 } 29 30 public static String getField() { 31 System.out.println("child普通属性初始化"); 32 return "field"; 33 } 34 } 35 36 class Parent { 37 private static String staticField = getStaticField(); 38 static { 39 System.out.println("parent静态方法块初始化"); 40 } 41 private String field = getField(); 42 { 43 System.out.println("parent普通方法块初始化"); 44 } 45 46 public Parent() { 47 System.out.println("parent构造函数初始化"); 48 } 49 50 public static String getStaticField() { 51 System.out.println("parent静态属性初始化"); 52 return "staticField"; 53 } 54 55 public static String getField() { 56 System.out.println("parent普通属性初始化"); 57 return "field"; 58 } 59 }
Hasil cetakan:
1 parent静态属性初始化 2 parent静态方法块初始化 3 child静态属性初始化 4 child静态方法块初始化 5 parent普通属性初始化 6 parent普通方法块初始化 7 parent构造函数初始化 8 child普通属性初始化 9 child普通方法块初始化 10 child构造函数初始化 11 ================================ 12 parent普通属性初始化 13 parent普通方法块初始化 14 parent构造函数初始化 15 child普通属性初始化 16 child普通方法块初始化 17 child构造函数初始化
Dengan menggantikan susunan pengisytiharan atribut statik dan blok pemula statik, didapati bahawa susunan pemula bagi atribut statik dan blok pemula statik adalah berkaitan dengan susunan pengisytiharan Begitu juga, susunan pemula bagi atribut biasa dan blok pemula biasa adalah berkaitan dengan perintah pengisytiharan.
Ringkasan:
Apabila kelas memenuhi syarat untuk permulaan (akan diringkaskan dalam blog akan datang), kelas induk akan dimulakan terlebih dahulu (memulakan daripada Objek kelas induk teratas ke bawah), dan kemudian subkelas akan dimulakan
Apabila memulakan kelas ini, sifat statik dan blok permulaan statik dimulakan terlebih dahulu (berkaitan dengan susunan pengisytiharan), dan dimulakan ke bawah daripada Objek kelas induk peringkat atas; Apabila mencipta objek melalui baharu, mula-mula mulakan sifat biasa dan blok permulaan biasa (berkaitan dengan susunan pengisytiharan), dan kemudian panggil kaedah pembina, juga melaksanakan ke bawah daripada Objek kelas induk peringkat atas
Sifat statik dan blok permulaan statik hanya akan dimulakan sekali Selepas kelas dimulakan, mencipta objek melalui baharu semula hanya akan mengulangi langkah ketiga.
Seterusnya ialah petikan daripada idea pengaturcaraan Java:
Atas ialah kandungan terperinci Apakah susunan permulaan kelas Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!