Apakah Susunan Permulaan Blok Statik dan Instance dalam Warisan Java?
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:
- Blok pemula statik semua kelas dan antara muka dilaksanakan dalam susunan atas ke bawah yang luas-pertama, tanpa mengira pergantungan mereka perhubungan.
- Setelah semua blok pemula statik telah dilaksanakan, contoh blok pemula dan pembina semua kelas dilaksanakan mengikut susunan kelas dimulakan dalam program.
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Apabila menggunakan tkmybatis untuk pertanyaan pangkalan data, bagaimana dengan anggun mendapatkan nama pembolehubah kelas entiti untuk membina keadaan pertanyaan adalah masalah biasa. Artikel ini akan ...
