2015-02-26 8 views
8

मेरे पास एक सरल कमांड लाइन जावा एप्लिकेशन से संबंधित निम्नलिखित संदेह हैं।मुख्य() विधि के जावा एप्लिकेशन निकास कोड को वास्तव में कैसे काम करता है?

तो मैं इस कमांड लाइन आवेदन है कि एक मुख्य() विधि एक मुख्य वर्ग के अंदर definied द्वारा startd है।

हमेशा की तरह इस मुख्य() विधि इस हस्ताक्षर के साथ definied है:

public static void main(String[] args) { 

तो इसे वापस प्रकार शून्य है। तो इसका मतलब यह होना चाहिए कि यह कोई मूल्य वापस नहीं करता है।

लेकिन जब इसका निष्पादन सही ढंग से समाप्त हो जाता है तो मैं इस संदेश को IntelliJ कंसोल में प्राप्त करता हूं?

Disconnected from the target VM, address: '127.0.0.1:54090', transport: 'socket' 

Process finished with exit code 0 

वास्तव में क्या बाहर निकलें कोड 0 प्रतिनिधित्व करते हैं?

मुझे लगता है कि इसका मतलब है कि प्रोग्राम ने किसी भी त्रुटि के बिना अपने निष्पादन को सही ढंग से पूरा कर लिया है। कारण है कि यह अगर मेरे मुख्य() विधि वापसी शून्य होता

  1. अगर यह सच है:

    तो अब मैं निम्नलिखित 2 शक है?

  2. यदि मेरा एप्लिकेशन किसी त्रुटि के साथ समाप्त होता है तो मैं एक अलग निकास कोड कैसे वापस कर सकता हूं? त्रुटियों के साथ समाप्त होने के लिए एक मानक निकास कोड मान मौजूद है?

Tnx

+2

'System.exit (1)' – Albert

+1

कृपया ['सिस्टम 'वर्ग, विशेष रूप से' बाहर निकलें (int)'] के दस्तावेज़ों को पढ़ें (http://docs.oracle.com/javase/7/docs/api /java/lang/System.html#exit%28int%29)। – RealSkeptic

+1

जावा के लिए प्रयुक्त सम्मेलन द्वारा निकास कोड 0 केवल 0 है। एक सामान्य मामले में 0 से बाहर निकलने वाला कोड एक त्रुटि के लिए संकेतक होना चाहिए, यदि सिस्टम प्रोग्राम के पीछे प्रोग्रामर सिस्टम.एक्सिट() का उपयोग करते समय इस सम्मेलन का पालन नहीं करता है तो मामले की आवश्यकता नहीं है; – SomeJavaGuy

उत्तर

15

वीएम छोड़कर चला जाता

  • गैर डेमॉन धागे के सभी चलने बंद हो जाते हैं, या
  • System.exit(exitCode)

पहले मामले में कहा जाता है, निकास कोड 0 है। दूसरे मामले में, यह exit() मुझे पास निकास कोड है Thod।

यह न भूलें कि आपका मुख्य() विधि लौटाए जाने पर भी, प्रोग्राम तब तक जारी रहेगा जब तक कोई गैर-डिमन थ्रेड नहीं चलता। और वीएम में चल रहे किसी भी धागे स्पष्ट रूप से बाहर निकलने का विकल्प चुन सकते हैं।

निकास कोड 0 का अर्थ है कि सबकुछ अपेक्षित था। आप पर्यावरण के लिए असाधारण स्थिति को सिग्नल करने के लिए किसी अन्य निकास कोड का उपयोग करना चुन सकते हैं।

+0

ठीक है, टीएनएक्स। शायद मेरा एक बेवकूफ सवाल है लेकिन वास्तव में "गैर डिमन थ्रेड" क्या है? – AndreaNobili

+2

एक डेमॉन थ्रेड एक धागा है जो अंतिम "सामान्य", गैर-डिमन थ्रेड, चलने से रोकता है जब स्वचालित रूप से चलना बंद कर देता है। Http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html पढ़ें –

3

प्रक्रिया का बाहर निकलने का तरीका ऑपरेटिंग सिस्टम को इसके त्रुटि कोड के रूप में प्रक्रिया रिपोर्ट करता है।

जावा डिजाइनरों int वापस जाने के लिए इतना JVM ओएस के लिए एक प्रक्रिया से बाहर निकलें कोड के रूप में यह मान सकते हैं कि रिपोर्ट main() विधि बना सकता है।लेकिन उन्होंने मुख्य शून्य बनाने का निर्णय लिया लेकिन एपीआई प्रदान किया जो System.exit(exitCode) का उपयोग करके इस कोड को अपडेट कर सकता है। इस समाधान का लाभ यह है कि कार्यक्रम किसी भी बिंदु पर और किसी भी थ्रेड में बाहर निकलने का निर्णय नहीं ले सकता है, न केवल मुख्य विधि में और मुख्य धागे में।

3

0 का एक निकास कोड का अर्थ है कि यह सामान्य रूप से पूरा हो जाता है, यह सभी प्रक्रियाओं के लिए मानक है, न केवल जावा। मूल्य मुख्य विधि (यह शून्य है) से वापस नहीं लौटा रहा है, लेकिन JVM से ही।

एक अलग मूल्य निर्दिष्ट किया जा सकता है, उदा। System.exit(1) कुछ त्रुटि स्थिति इंगित करने के लिए, और प्रोग्राम बंद हो जाता है।

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