बिना किसी अपवाद के सफलता के बाद जावा सफलता से बाहर क्यों निकलता है?


24

किसी भी समय एक पर्ल, पायथन, C ++ या Tcl प्रोग्राम बिना किसी अपवाद के रुकता है, जो भाषा रनटाइम की प्रक्रिया के लिए गैर-शून्य निकास कोड को पंजीकृत करने के लिए ध्यान रखते हैं। यहां तक ​​कि ग्रहण-आधारित कार्यक्रम 1 लौटते हैं यदि वे स्टार्टअप के दौरान विफल हो जाते हैं। java.exeहालाँकि, मानक द्वारा चलाए जा रहे कार्यक्रम , ख़ुशी से शून्य वापस लौट जाते हैं, चाहे वह अचानक समाप्त क्यों न हो जाए, जब तक कि प्रोग्राम System.exit()एक्ज़िट वैल्यू के साथ न आ जाए । यहां तक ​​कि AssertionFailedErrorया UnsatisfiedLinkErrorकॉलिंग प्रोग्राम में सफल निकास के रूप में वापस रिपोर्ट किया जाता है।

बेशक सभी प्रणालियों में प्रोग्राम रिटर्न कोड नहीं हैं, लेकिन यूनिक्स और विंडोज java.lang.Process.exitValue()बच्चे प्रक्रियाओं के लिए वारंट के लिए महत्वपूर्ण थे ; क्या वे मूल प्रक्रियाओं के लिए सम्मेलनों का सम्मान भी करते हैं?

क्या यह भाषा के डिजाइन में दोष है या सिर्फ कार्यान्वयन में है? क्या कोई तर्क है कि यह एक अच्छा विचार है?


आश्चर्य है कि यह StackOverflow पर बेहतर अनुकूल नहीं है ... बस एक राय है, हालांकि।
गाब्लिन

@ गैबलिन मम्म, वास्तव में मैंने एसओ पर यह सवाल लिखना शुरू कर दिया और फिर अपना मन बदल दिया और इसे यहां पोस्ट किया।
जेम्स

4
javaमें आदेश जावा 6 और जावा 7 यदि न आया हुआ अपवाद उठाया है दोनों एक गैर शून्य से बाहर निकलें कोड के साथ प्रतिक्रिया करने लगते हैं।
dimo414

जवाबों:


28

यदि जावा लैंग्वेज स्पेसिफिकेशन स्पष्ट रूप से परिभाषित नहीं करता है कि किस निकास मूल्य की अपेक्षा की जाए, तो यह अपरिभाषित है और आपको इस पर भरोसा नहीं करना चाहिए।

आपको अपने मुख्य तरीके में थ्रोएबल को पकड़ने की जरूरत है, और सिस्टम.एक्सिट (1) को स्वयं कॉल करें।


8
तो क्या इसे अपरिभाषित छोड़ने की कमी नहीं है?
जेम्स

3
शायद शायद नहीं। एकमात्र महत्वपूर्ण बात यह है कि जेएलएस क्या कहता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.