Java Academy · Pelajaran

Fasa Pemuatan Kelas: Muat, Paut, Mulakan

Telusuri proses pemuatan, pengesahan, penyediaan, penyelesaian dan pemulaan kelas.

Pelajaran 1 daripada 413 langkah

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.class

Fasa 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.jar

Semakan 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.

Percuma untuk bermula

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

  1. Fasa Pemuatan Kelas: Muat, Paut, Mulakan
  2. Hierarki ClassLoader dan Pemuat Tersuai
  3. Memeriksa Bytecode dengan javap
  4. Penyusunan JIT dan Penyusunan Berperingkat
← Kembali ke Java Academy