Pertama, mari kita lihat kod berikut. Ini adalah cara pemeriksaan yang sangat klasik.
public class InitField { public static void main(String[] args) { SuperInitField p = new SuperInitField(); SuperInitField c = new SubInitField(); } } class SuperInitField { public SuperInitField() { System.out.println("parent"); } static { System.out.println("static parent"); } } class SubInitField extends SuperInitField { public SubInitField() { System.out.println("child"); } static { System.out.println("static child"); } }
Sama ada anda boleh menulis jawapan yang betul dengan cepat atau tidak, mari letakkan atur cara ini dahulu dan fahami prinsip permulaan mesin maya Java.
JVM memasang, menyambung dan memulakan jenis Java supaya jenis itu boleh digunakan dengan menjalankan program Java. Kitaran hayat jenis adalah seperti yang ditunjukkan di bawah:
Pemuatan dan sambungan mesti diselesaikan sebelum pemula.
Fasa permulaan kelas adalah terutamanya untuk memberikan nilai awal yang betul kepada pembolehubah kelas. Nilai awal "betul" di sini merujuk kepada nilai permulaan yang pengaturcara menjangkakan pembolehubah kelas ini ada. Nilai permulaan yang betul diberikan melalui pernyataan permulaan pembolehubah kelas atau pernyataan permulaan statik. Memulakan kelas melibatkan dua langkah:
1) Jika kelas mempunyai superclass langsung, dan superclass langsung belum dimulakan, mulakan superclass langsung terlebih dahulu.
2) Jika kelas mempunyai kaedah permulaan kelas, jalankan kaedah ini.
Bilakah kelas akan dimulakan? Spesifikasi mesin maya Java dengan tegas mentakrifkan masa permulaan kelas: dimulakan apabila ia digunakan secara aktif.
Jadi apakah situasi yang memenuhi kriteria untuk kegunaan aktif oleh ***? Spesifikasi Mesin Maya Java menerangkan perkara ini, iaitu:
1) Buat contoh baharu kelas; 2) Panggil kaedah statik kelas; ) Memanipulasi medan statik kelas atau antara muka (kecuali medan akhir); 6) Tentukan kelas sebagai kelas permulaan apabila mesin maya Java bermula.
Kecuali untuk enam situasi di atas, semua kaedah lain digunakan secara pasif dan tidak akan menyebabkan permulaan kelas.
Setelah kelas dimuatkan, disambungkan dan dimulakan, ia sedia untuk digunakan. Sekarang mari kita fokus pada instantiasi objek. Penentuan objek dan permulaan adalah aktiviti dalam peringkat awal kehidupan objek.
Pengkompil Java menjana sekurang-kurangnya satu kaedah permulaan contoh untuk setiap kelas yang disusunnya, iaitu kaedah
Mungkin terdapat tiga jenis kandungan kod yang disertakan dalam kaedah
Atas ialah kandungan terperinci Bagaimana untuk memulakan kelas dan objek dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!