Fasa Pemuatan Kelas: Muat, Paut, Mulakan
Telusuri proses pemuatan, pengesahan, penyediaan, penyelesaian dan pemulaan kelas.
Fasa Pemuatan Kelas: Muat, Paut, Mulakan ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Kitar Hayat Pemuatan Kelas
Sesuatu kelas Java melalui tiga fasa sebelum boleh digunakan: Pemuatan (mencari dan membaca kod bait), Pautan (mengesahkan, menyediakan dan menyelesaikan) serta Pemulaan (menjalankan pemula statik).
Fasa 1: Pemuatan
ClassLoader membaca fail .class (daripada sistem fail, JAR, rangkaian atau kod bait yang dijana) dan mencipta objek Class<?> dalam timbunan untuk mewakilinya.
// Trigger loading explicitly:
Class<?> c = Class.forName("com.example.MyService");
// The JVM delegates to the appropriate ClassLoader to find and load MyService.classFasa 2a: Pengesahan
Pengesah kod bait menyemak bahawa kod bait yang dimuatkan sah dari segi struktur, selamat dari segi jenis dan mematuhi peraturan spesifikasi JVM. Kod bait yang tidak sah, contohnya yang dimanipulasi secara salah dengan ASM, menyebabkan VerifyError.
Fasa 2b: Penyediaan
JVM memperuntukkan memori untuk medan statik dan menetapkannya kepada nilai lalai masing-masing (0, false, null). Pemula statik masih NOT dijalankan pada peringkat ini.
public class Config {
static int timeout = 30; // after preparation: timeout = 0 (default)
static String host = "db"; // after preparation: host = null
// Both get their real values only after Initialization
}Fasa 2c: Penyelesaian
Rujukan simbolik seperti nama kelas dan tandatangan kaedah dalam kolam pemalar digantikan dengan rujukan terus (penunjuk) kepada kelas dan kaedah sebenar. Penyelesaian ini mungkin ditangguhkan dan dilakukan secara malas.
Fasa 3: Pemulaan
Pemula statik (blok static {}) dan penetapan medan statik dijalankan mengikut susunan teks. Pada masa inilah timeout = 30 dan host = "db" sebenarnya dilaksanakan.
public class Config {
static int timeout;
static String host;
static {
timeout = Integer.parseInt(System.getenv("TIMEOUT"));
host = System.getenv("DB_HOST");
System.out.println("Config initialized");
}
}Pencetus Inisialisasi Kelas
Inisialisasi berlaku kali pertama apabila: (1) tika dicipta, (2) medan statik dicapai (bukan pemalar), (3) kaedah statik dipanggil, (4) refleksi dilakukan melalui Class.forName() (dengan initialize=true), (5) subkelas diinisialisasikan.
// forName with initialize=false skips static initializers:
Class<?> c = Class.forName("com.example.MyService", false, loader);Kaedah <clinit>
JVM menjana kaedah <clinit> (pemula kelas) daripada semua pemula statik dan penetapan medan statik. Kaedah ini berjalan tepat sekali dan selamat untuk utas — JVM menjamin pengecualian bersama.
ExceptionInInitializerError
Jika pemula statik melontarkan ralat, JVM membungkusnya dalam ExceptionInInitializerError. Percubaan seterusnya untuk menggunakan kelas tersebut akan melontarkan NoClassDefFoundError.
static {
if (System.getenv("DB_URL") == null)
throw new RuntimeException("DB_URL not set"); // wrapped in ExceptionInInitializerError
}Susunan Inisialisasi Statik
Pemula statik berjalan mengikut susunan teks. Kebergantungan kelas berbentuk kitaran semasa inisialisasi boleh menyebabkan kelas diinisialisasikan secara separa — perangkap yang diketahui dalam corak Initialization-on-Demand Holder.
class A {
static final int X = B.Y + 1; // accesses B before B is initialized!
}
class B {
static final int Y = A.X + 1; // circular!
}Memerhati Pemuatan Kelas
Aktifkan keluaran catatan pemuatan kelas dengan -Xlog:class+load=info (JVM 9+) untuk melihat kelas yang dimuatkan, sumbernya dan ClassLoader yang memuatkannya.
// JVM flag:
// java -Xlog:class+load=info:file=classload.log MyApp
// Output lines like:
// [info][class,load] com.example.MyService source: file:///app/app.jarSemakan Pantas
Semasa fasa manakah pemula statik dilaksanakan?
Rumusan
Muatkan: baca kod bait. Pautkan: sahkan → sediakan (nilai lalai sifar) → selesaikan (rujukan simbolik). Inisialisasikan: jalankan <clinit>. Inisialisasi dicetuskan oleh penggunaan pertama dan selamat untuk utas. Kebergantungan kitaran semasa inisialisasi menyebabkan pepijat yang sukar dikesan.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Fasa Pemuatan Kelas: Muat, Paut, Mulakan” percuma?
Ya — teks penuh “Fasa Pemuatan Kelas: Muat, Paut, Mulakan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Fasa Pemuatan Kelas: Muat, Paut, Mulakan”?
Telusuri proses pemuatan, pengesahan, penyediaan, penyelesaian dan pemulaan kelas. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Fasa Pemuatan Kelas: Muat, Paut, Mulakan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Fasa Pemuatan Kelas: Muat, Paut, Mulakan
- Hierarki ClassLoader dan Pemuat Tersuai
- Memeriksa Bytecode dengan javap
- Penyusunan JIT dan Penyusunan Berperingkat