0Pricing
Java Academy · Pelajaran

Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi

Telusuri proses pemuatan, verifikasi, persiapan, resolusi, dan inisialisasi class.

Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Siklus Pemuatan Kelas

Sebuah kelas Java melalui tiga fase sebelum dapat digunakan: Pemuatan (menemukan dan membaca kode bita), Penautan (memverifikasi, menyiapkan, dan menyelesaikan), serta Inisialisasi (menjalankan penginisialisasi statis).

Fase 1: Pemuatan

ClassLoader membaca berkas .class (dari sistem berkas, JAR, jaringan, atau kode bita yang dihasilkan) dan membuat objek Class<?> di heap yang merepresentasikannya.

// Trigger loading explicitly:
Class<?> c = Class.forName("com.example.MyService");
// The JVM delegates to the appropriate ClassLoader to find and load MyService.class

Fase 2a: Verifikasi

Verifikator kode bita memeriksa apakah kode bita yang dimuat valid secara struktural, aman terhadap tipe, dan mengikuti aturan spesifikasi JVM. Kode bita yang tidak valid (misalnya dimanipulasi secara keliru dengan ASM) menyebabkan VerifyError.

Fase 2b: Persiapan

JVM mengalokasikan memori untuk anggota data statis dan mengaturnya ke nilai bawaan (0, false, null). Penginisialisasi statis BELUM dijalankan pada tahap 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
}

Fase 2c: Penyelesaian

Referensi simbolis (nama kelas, tanda tangan metode) dalam kumpulan konstanta digantikan dengan referensi langsung (penunjuk) ke kelas dan metode yang sebenarnya. Penyelesaian ini dapat ditunda (penyelesaian malas).

Fase 3: Inisialisasi

Penginisialisasi statis (blok static {}) dan penetapan anggota data statis dijalankan sesuai urutan tekstual. Pada saat inilah timeout = 30 dan host = "db" benar-benar dieksekusi.

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");
    }
}

Pemicu Inisialisasi Class

Inisialisasi berjalan pertama kali saat: (1) pembuatan instance, (2) akses atribut statis (nonkonstan), (3) pemanggilan metode statis, (4) refleksi melalui Class.forName() (dengan initialize=true), (5) inisialisasi subkelas.

// forName with initialize=false skips static initializers:
Class<?> c = Class.forName("com.example.MyService", false, loader);

Metode <clinit>

JVM menghasilkan metode <clinit> (penginisialisasi kelas) dari semua penginisialisasi statis dan penetapan atribut statis. Metode ini berjalan tepat satu kali dan aman untuk utas — JVM menjamin eksklusi mutual.

ExceptionInInitializerError

Jika penginisialisasi statis melempar pengecualian, JVM membungkusnya dalam ExceptionInInitializerError. Upaya berikutnya untuk menggunakan kelas tersebut akan melempar NoClassDefFoundError.

static {
    if (System.getenv("DB_URL") == null)
        throw new RuntimeException("DB_URL not set"); // wrapped in ExceptionInInitializerError
}

Urutan Inisialisasi Statis

Penginisialisasi statis berjalan sesuai urutan tekstual. Dependensi kelas yang melingkar selama inisialisasi dapat menyebabkan kelas yang hanya terinisialisasi sebagian — jebakan yang dikenal dalam pola 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!
}

Mengamati Pemuatan Class

Aktifkan keluaran log pemuatan kelas dengan -Xlog:class+load=info (JVM 9+) untuk melihat kelas mana yang dimuat, dari mana asalnya, dan oleh ClassLoader mana.

// 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

Pemeriksaan Singkat

Pada fase apakah penginisialisasi statis dijalankan?

Ringkasan

Memuat: membaca kode bita. Menautkan: memverifikasi → menyiapkan (nilai bawaan nol) → menyelesaikan (referensi simbolis). Menginisialisasi: menjalankan <clinit>. Inisialisasi dipicu oleh penggunaan pertama dan aman untuk utas. Dependensi yang melingkar selama inisialisasi menyebabkan kesalahan yang sulit dideteksi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi” gratis?

Ya — teks lengkap “Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi”?

Telusuri proses pemuatan, verifikasi, persiapan, resolusi, dan inisialisasi class. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tahap Pemuatan Class: Memuat, Menautkan, Menginisialisasi
  2. Hierarki ClassLoader dan Pemuat Kustom
  3. Memeriksa Bytecode dengan javap
  4. Kompilasi JIT dan Kompilasi Bertingkat
← Kembali ke Java Academy