Semua kode Java berjalan dalam konteks utas . JavaDoc yang ditautkan menjelaskan kriteria penanganan dan keluar kesalahan, tetapi di sini adalah intinya:
- JVM memutar dirinya sendiri dan menyiapkan lingkungan eksekusi.
- JVM membuat utas yang akan menjalankan
main()
metode menggunakan parameter baris perintah apa pun yang berlaku.
- JVM menetapkan handler pengecualian tanpa tertangkap standar yang mencetak pengecualian untuk kesalahan standar dan berakhir.
- JVM mengeksekusi utas.
Dalam kasus pengecualian tanpa tertangkap, program secara efektif mati per item ketiga di atas. Perilaku ini selanjutnya ditentukan dalam Spesifikasi Bahasa Jawa, Bagian 11.3
informasi tambahan
Yang lain telah menyebutkan blok statis dan bagaimana mereka mengeksekusi sebelumnya main()
. Namun, ini membutuhkan penjelasan yang lebih banyak untuk dapat dipahami dengan benar.
Saat memuat kelas, pemuat kelas harus menginisialisasi semua static final
negara dan menjalankan semua static
blok sebelum kelas dapat digunakan, untuk memasukkan instance instance kelas (selain: membuat kelas Java di mana konstanta kelas diinisialisasi dalam blok statis setelah membuat turunan dari kelas, dan konstruktor mereferensikan konstanta. Boom!). Namun, ini semua terjadi dalam logika loader kelas sebelum kode apa pun dapat merujuk kelas . Selanjutnya, kelas dimuat dalam utas apa pun yang merujuk kelas.
Apa artinya ini adalah jika kelas yang berisi main()
referensi kelas lain (misalnya konstanta kelas) maka kelas itu harus dimuat sebelum main()
dijalankan untuk menyertakan blok statisnya. Kalau tidak, blok statis dieksekusi seperti di atas. Jika kelas gagal memuat, maka kelas yang berisi main()
juga akan gagal memuat dan program akan berakhir.
FYI lain: blok statis bisa melempar. Errors
dilempar apa adanya. Exceptions
dilarang (kesalahan waktu kompilasi). RuntimeExceptions
terbungkus dalam ExceptionInInitializerError . Ini ditangani per handler pengecualian tanpa tertangkap, yang biasanya akan mematikan utas atau aplikasi (utas utama) kecuali Anda dengan hati-hati membungkus referensi kelas (dan memuat) dalam a try
- catch
.