Java neden yakalanmamış bir istisnadan sonra başarıyla çıkıyor?


24

Bir Perl, Python, C ++ veya Tcl programı işlenmeyen bir istisna dışında durduğunda, bu dil çalışma zamanları işlem için sıfır olmayan bir çıkış kodu kaydetmeye özen gösterir. Eclipse tabanlı programlar bile başlatma sırasında başarısız olursa 1 değerini döndürür. java.exeBununla birlikte, standart tarafından çalıştırılan programlar , program System.exit()bir çıkış değeriyle çağrılmadıkça, ne kadar aniden sona erdiğine bakılmaksızın mutlu bir şekilde sıfır döndürür . Hatta AssertionFailedErrorveya UnsatisfiedLinkErrorbaşarılı çıkışlar olarak çağıran programa geri bildirilir.

Elbette tüm sistemlerin program dönüş kodları yoktur, ancak Unix ve Windows java.lang.Process.exitValue()alt süreçleri garanti etmek için yeterince önemliydi ; ebeveyn süreçleri için sözleşmelere saygı duymalarını da istemiyorlar mı?

Bu, dil tasarımında veya sadece uygulamada bir kusur mu? İyi bir fikir olduğuna dair bir argüman var mı?


Acaba bu StackOverflow için daha uygun değil mi ... Yine de bir fikir.
gablin

@gablin Mmm, gerçekten de SO üzerine bu soruyu yazmaya başladım sonra fikrimi değiştirdim ve buraya gönderdim.
James

4
javaKomut Java 6 ve Java 7 yakalanmamış özel duruma neden hem sıfır olmayan çıkış kodu ile yanıt verdiklerini görünüyor.
dimo414

Yanıtlar:


28

Java Dil Belirtimi, hangi çıkış değerinin bekleneceğini açıkça tanımlamazsa, tanımsızdır ve buna güvenmemeniz gerekir.

Ana yönteminizde Throwable'ı yakalamanız ve System.exit'i (1) kendiniz aramanız gerekir.


8
Yani tanımsız bırakmak için bir eksiklik değil mi?
James

3
Belki, belki değil. JLS'nin söylediği tek önemli şey.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.