Jujukan Permulaan Blok Statik dan Instance dalam Java
Apabila bekerja dengan berbilang kelas di Java, fahami susunan pelaksanaan untuk statik dan contoh blok pemula menjadi penting. Walaupun diketahui bahawa dalam kelas, blok ini dijalankan mengikut susunan penampilan, masih terdapat ketidakpastian mengenai kelakuannya merentas kelas.
Untuk menunjukkan tingkah laku ini, pertimbangkan kod berikut:
package pkg; public class LoadTest { public static void main(String[] args) { System.out.println("START"); new Child(); System.out.println("END"); } } class Parent extends Grandparent { // Instance init block { System.out.println("instance - parent"); } // Constructor public Parent() { System.out.println("constructor - parent"); } // Static init block static { System.out.println("static - parent"); } } class Grandparent { // Static init block static { System.out.println("static - grandparent"); } // Instance init block { System.out.println("instance - grandparent"); } // Constructor public Grandparent() { System.out.println("constructor - grandparent"); } } class Child extends Parent { // Constructor public Child() { System.out.println("constructor - child"); } // Static init block static { System.out.println("static - child"); } // Instance init block { System.out.println("instance - child"); } }
Dijangka, output kod ini sejajar dengan andaian bahawa blok statik dilaksanakan sebelum contoh blok:
START static - grandparent static - parent static - child instance - grandparent constructor - grandparent instance - parent constructor - parent instance - child constructor - child END
Walau bagaimanapun, pemerhatian ini sahaja tidak menjelaskan susunan permulaan antara kelas ibu bapa dan kanak-kanak. Untuk meneroka aspek ini dengan lebih lanjut, pertimbangkan untuk menambah kelas yang tidak digunakan berikut pada kod:
class IAmAClassThatIsNeverUsed { // Constructor public IAmAClassThatIsNeverUsed() { System.out.println("constructor - IAACTINU"); } // Instance init block { System.out.println("instance - IAACTINU"); } // Static init block static { System.out.println("static - IAACTINU"); } }
Hebatnya, kod yang diubah suai masih menghasilkan output yang sama seperti kod asal. Ini menunjukkan bahawa blok pemula statik dan instance dilaksanakan dalam urutan berikut:
Tingkah laku ini sejajar dengan Spesifikasi Bahasa Java (JLS), yang memberikan penjelasan terperinci dalam bahagian 12.4 dan 12.5 .
Atas ialah kandungan terperinci Apakah Susunan Permulaan Blok Statik dan Instance dalam Warisan Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!