2012-12-26 7 views
5

जावा में, हम प्रोग्राम से बाहर निकलने के लिए System.exit(int) का उपयोग करते हैं। सी में "निकास मूल्य" का कारण यह था कि किसी प्रोग्राम में त्रुटियों की जांच के लिए निकास मान का उपयोग किया गया था। लेकिन जावा में, त्रुटियों को एक अपवाद से फेंक दिया जाता है, इस प्रकार उन्हें आसानी से संभाला जा सकता है। तो हमारे पास जावा में बाहर निकलने वाले मूल्य क्यों हैं?जावा में हमारे पास निकास कोड क्यों हैं?

+8

बाहर निकलने के मूल्य ऑपरेटिंग सिस्टम के लिए निर्दिष्ट किया जाता है है। –

+5

सभी डाउनवॉट क्यों? – arshajii

+0

possiblity डुप्लिकेट http://stackoverflow.com/q/457338/668970 – developer

उत्तर

13

बाहर निकलने वाले मूल्य कॉलिंग प्रोग्राम में वापस लौटाए गए हैं उदा। खोल। एक बाहरी कार्यक्रम द्वारा एक अपवाद पकड़ा नहीं जा सकता है।

बीटीडब्ल्यू जब आप अपवाद फेंकते हैं तो उसे उस धागे से पकड़ा जाता है या धागा मर जाता है, finally ब्लॉक अभी भी उस धागे के लिए बुलाए जाते हैं। जब आप System.exit() को कॉल करते हैं, तो सभी थ्रेड तुरंत बंद हो जाते हैं और अंत में ब्लॉक को कॉल नहीं किया जाता है।

0

कार्यक्रम के सफल या असफल समापन को संकेत देने के लिए कॉलर्स को निकास मूल्य वापस कर दिए जाते हैं। कॉलर अपवाद को पकड़ने और तदनुसार इसे संभालने में सक्षम नहीं हो सकता है।

उदाहरण के लिए। 0 निकास मूल्य का मतलब सफल समापन है जबकि गैर-शून्य रिटर्न मान का अर्थ निष्पादन में कुछ त्रुटि है।

इसके अलावा, System.exit() उस बिंदु पर रोकने के लिए एप्लिकेशन में सभी थ्रेड बनाएगा।

3

इसी कारण से।

निकास कोड विशेष रूप से डीबगिंग और हैंडलिंग उद्देश्यों के लिए कार्यक्रम के बाहर पार्टियों और अनुप्रयोगों द्वारा उपयोग किए जाते हैं। एक सुपर-एप्लिकेशन निश्चित रूप से एक स्टैक ट्रेस को पार्स करने की कोशिश करने से बेहतर रिटर्न कोड को संभाल सकता है।

इसके अलावा, यदि आप अंतिम उपयोगकर्ता के लिए आवेदन बना रहे हैं, तो आप कुछ कारणों से स्टैक ट्रेस जानकारी के समूह को पोस्ट करने के बजाय अपने ऐप से अधिक से अधिक बाहर निकलेंगे: एक, आप उन्हें डरा रहे होंगे बहुत सारे पागल दिखने वाले टेक्नो-गिबरिश के साथ, और दो, स्टैक निशान अक्सर प्रोग्राम को मूल रूप से संरचित करने के तरीके के बारे में संवेदनशील और गोपनीय जानकारी प्रकट करते हैं (एक संभावित हमलावर को सिस्टम के बारे में अधिक जानकारी देना)।

वास्तविक दुनिया के उदाहरण के लिए, मैं जावा बैच प्रोग्राम पर काम कर रहा था जिसने अपनी नौकरियों के लिए निकास कोड का उपयोग किया था। एक उपयोगकर्ता यह देख सकता था कि क्या नौकरी सफलतापूर्वक निष्पादित की गई है या नहीं, इस पर आधारित है कि निकास कोड "0" था या नहीं। यदि यह कुछ और था, तो वे बाहर निकलने के कोड की अतिरिक्त जानकारी के साथ सशस्त्र तकनीकी सहायता से संपर्क कर सकते थे, और सहायता डेस्क में उन निकास कोड के आधार पर सभी आवश्यक जानकारी होगी जो उनकी मदद के लिए होंगी। यह गैर-तकनीकी अंत उपयोगकर्ता से पूछने की कोशिश करने से बहुत अच्छा काम करता है, "ठीक है, तो आप क्या अपवाद प्राप्त कर रहे हैं?"

0

लंबी कहानी संक्षिप्त, जावा प्रोग्राम चलाने के दौरान अपवाद का सामना करने वाले उपयोगकर्ता को निकास कोड सरल सिग्नल होते हैं। चूंकि हम मानते हैं कि अधिकांश उपयोगकर्ता अपवाद के स्टैक ट्रेस डेटा को नहीं समझते हैं, ये सरल गैर शून्य कस्टम कोड उन्हें बताएंगे कि कुछ गलत है और यह विक्रेता को सूचित किया जाना चाहिए। तो विक्रेता को कोड मिल जाता है और वह उस कोड से जुड़े स्टैक ट्रेस को जानता है और सिस्टम की मरम्मत करने की कोशिश करता है। यह प्रोग्रामर द्वारा प्रदान किया गया एक अमूर्त है ताकि उपयोगकर्ताओं को विशाल स्टैक निशान पढ़ने और रिपोर्ट करने की आवश्यकता न हो। यहां एक बहुत अच्छा सादृश्य है SQLException वर्ग में getErrorCode() विधि है। यह विधि क्लाइंट मशीन पर चल रहे मौजूदा JVM को भी बंद कर देती है। इसका तात्पर्य यह है कि यह JVM में मौजूद सभी थ्रेड को समाप्त करता है। यह विधि क्लास Java.lang.Runtime कक्षा में निकास विधि को कॉल करती है। यदि आप इस विधि के दस्तावेज़ीकरण पर जाते हैं, तो आप समझेंगे कि वर्चुअल मशीन कैसे बंद हो जाती है।

यह लिंक http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#exit%28int%29

संबंधित मुद्दे