Setiap kali program Perl, Python, C ++ atau Tcl berhenti dengan pengecualian yang tidak tertangani, runtimes bahasa tersebut berhati-hati untuk mendaftarkan kode keluar yang tidak nol untuk proses tersebut. Bahkan program berbasis Eclipse mengembalikan 1 jika gagal saat startup. Program yang dijalankan oleh standar java.exe
, bagaimanapun, dengan senang hati mengembalikan nol tidak peduli seberapa cepat mereka berakhir, kecuali program memanggil System.exit()
dengan nilai keluar. Bahkan AssertionFailedError
atau UnsatisfiedLinkError
dilaporkan kembali ke program panggilan saat keluar dengan sukses.
Tentu saja tidak semua sistem memiliki kode pengembalian program, tetapi Unix dan Windows cukup penting untuk menjamin java.lang.Process.exitValue()
proses anak; bukankah mereka juga menjamin konvensi penghormatan untuk proses induk?
Apakah ini cacat dalam desain bahasa atau hanya dalam implementasi? Apakah ada argumen bahwa itu ide yang bagus?
sumber
java
perintah dalam Java 6 dan Java 7 kedua tampaknya merespon dengan kode keluar non-nol jika eksepsi tidak tertangkap dinaikkan.Jawaban:
Jika Spesifikasi Bahasa Jawa tidak secara eksplisit menentukan nilai keluar apa yang diharapkan, maka itu tidak terdefinisi dan Anda tidak harus bergantung padanya.
Anda perlu menangkap Throwable dalam metode utama Anda, dan panggil System.exit (1) sendiri.
sumber