जावा प्रोग्राम को समाप्त करना


80

मुझे अपने जावा प्रोग्रामों को बंद करने (बंद करने या बंद करने) के तरीके पता चले। मुझे इसके लिए दो समाधान मिले।

  1. वापसी का उपयोग करना ;
    जब मैं अपना प्रोग्राम निष्पादन छोड़ना या समाप्त करना चाहता हूं, तो मैं इसे जोड़ता हूं।

  2. System.exit () का उपयोग कर ;
    कभी-कभी मैंने इसका इस्तेमाल किया। मैंने इस प्रश्न से Sytem.exit () के बारे में पढ़ा ।

इसलिए, मैं उन दोनों को थोड़ा जानता हूं। लेकिन मैं अभी भी उलझन में हूं कि वे वास्तव में कैसे काम करते हैं। कृपया नीचे दिए गए कोड देखें ...

public class Testing {

public static void main(String... str) {
    System.out.println(1);
    System.exit(0);
    System.out.println(2);
    return;
 }
}

मुझे यकीन है कि 2 दिखाई नहीं देंगे। मैं जानना चाहूंगा कि क्यों return;या अन्य संहिताएं बयान के नीचे लिख सकती हैं System.exit(0);और इसके लिए वास्तविक परिभाषा क्या थी return;( क्योंकि यह मेरे लिए returnकिसी भी चर या मूल्यों के बिना अजीब बात है )?



जवाबों:


101

कॉलिंग System.exit(0)(या उस मामले के लिए कोई अन्य मूल्य) वर्तमान प्रक्रिया को समाप्त करने के लिए जावा वर्चुअल मशीन से बाहर निकलने का कारण बनता है। आपके द्वारा पास किया जाने वाला पैरामीटर रिटर्न मान javaहोगा जो प्रक्रिया ऑपरेटिंग सिस्टम पर वापस आ जाएगी। आप अपने कार्यक्रम में कहीं से भी यह कॉल कर सकते हैं - और परिणाम हमेशा एक ही होगा - जेवीएम समाप्त। के रूप में यह बस Systemकक्षा में एक स्थिर विधि कह रहा है , संकलक को पता नहीं है कि यह क्या करेगा - और इसलिए अनुपलब्ध कोड के बारे में शिकायत नहीं करता है।

returnकथन केवल वर्तमान पद्धति के निष्पादन को निरस्त करता है। इसका शाब्दिक अर्थ है कॉलिंग विधि पर नियंत्रण वापस करना । यदि विधि को void(आपके उदाहरण में) के रूप में घोषित किया गया है , तो आपको मूल्य निर्दिष्ट करने की आवश्यकता नहीं है, क्योंकि आपको वापस लौटने की आवश्यकता होगी void। यदि विधि किसी विशेष प्रकार को वापस करने के लिए घोषित की जाती है, तो आपको लौटने के लिए मान निर्दिष्ट करना होगा - और यह मान निर्दिष्ट प्रकार का होना चाहिए।

returnयदि यह mainमुख्य वर्ग के निष्पादन की विधि के अंदर है तो ही कार्यक्रम से बाहर निकलने का कारण होगा । यदि आप इसके बाद कोड डालने का प्रयास करते हैं, तो संकलक अप्राप्य कोड के बारे में शिकायत करेगा, उदाहरण के लिए:

public static void main(String... str) {
    System.out.println(1);
    return;
    System.out.println(2);
    System.exit(0);
}

अधिकांश संकलक के साथ संकलित नहीं करेगा - unreachable codeदूसरी System.out.printlnकॉल की ओर इशारा करते हुए त्रुटि उत्पन्न करने वाला ।


14
  1. System.exit () एक विधि है जो JVM से बाहर निकलती है।
  2. रिटर्न सिर्फ कॉलिंग फ़ंक्शन पर नियंत्रण लौटाता है।
  3. वापसी 8 नियंत्रण और मूल्य 8 को कॉलिंग विधि में लौटाएगा।

11

क्योंकि System.exit()कंपाइलर का सिर्फ एक और तरीका है। यह आगे नहीं पढ़ता है और यह पता लगाता है कि पूरा कार्यक्रम उस बिंदु पर छोड़ देगा (जेवीएम क्विट करता है)। आपका ओएस या शेल पूर्णांक को पढ़ सकता है जो System.exit()विधि में वापस पारित हो गया है । यह 0मतलब है "कार्यक्रम छोड़ दिया और सब कुछ ठीक हो गया" के लिए मानक है और किसी त्रुटि को सूचित करने के लिए कोई अन्य मूल्य है। यह डेवलपर पर निर्भर है कि वह किसी भी उपयोगकर्ताओं के लिए इन रिटर्न मानों का दस्तावेजीकरण करे।

returnदूसरी ओर एक आरक्षित कुंजी शब्द है जिसे कंपाइलर अच्छी तरह जानता है। returnएक मान लौटाता है और वर्तमान फ़ंक्शन के रन को स्टैक तक वापस उस फ़ंक्शन पर ले जाता है जो इसे (यदि कोई हो) को लागू करता है। आपके कोड के ऊपर यह वापस आ voidजाता है क्योंकि आपने वापस लौटने के लिए कुछ भी नहीं दिया है।


2
क्या यह वास्तव में वापस आता है null? क्या यह शून्य जैसा कुछ नहीं है? आप nullवापसी के प्रकार के साथ विधि में नहीं लौट सकते void
कीर्तिवासन

आप सही हैं, मैं अपना जवाब बदल दूंगा। गलती को इंगित करने के लिए धन्यवाद।
अविभाजित

7

System.exit () JVM को समाप्त करता है। System.exit () निष्पादित होने के बाद कुछ भी नहीं। आम तौर पर रिटर्न एक विधि से बाहर निकलने के लिए उपयोग किया जाता है। यदि रिटर्न प्रकार शून्य है, तो आप रिटर्न का उपयोग कर सकते हैं; लेकिन मुझे नहीं लगता कि यह मुख्य विधि में करने के लिए एक अच्छा अभ्यास है। आपको किसी प्रोग्राम को समाप्त करने के लिए कुछ भी करने की ज़रूरत नहीं है, जब तक कि अनंत लूप या कुछ अजीब अन्य निष्पादन प्रवाह न हों।


6

तो लौट आओ; वास्तव में आपके जावा प्रोग्राम को समाप्त नहीं करता है , यह केवल आपके जावा फ़ंक्शन (शून्य) को समाप्त करता है । क्योंकि आपके मामले में फ़ंक्शन आपके आवेदन का मुख्य कार्य है, वापसी; आवेदन को भी समाप्त कर देगा। लेकिन वापसी; आपके उदाहरण में बेकार है, क्योंकि फ़ंक्शन वैसे भी इस वापसी के बाद सीधे समाप्त हो जाएगा ...

System.exit () को पूरी तरह से अपने कार्यक्रम को समाप्त कर देगा और यह किसी भी खुली खिड़की बंद हो जाएगा।


4

क्या लौटता है; मतलब?

return;वास्तव में इसका मतलब है कि यह कुछ भी नहीं लौटाता है void। बस।

वापस क्यों; या अन्य कोड System.exit (0) के विवरण के नीचे लिख सकते हैं;

इसकी अनुमति है क्योंकि संकलक को यह पता नहीं है कि कॉलिंग System.exit(0)समाप्त हो जाएगी JVM। संकलक सिर्फ एक चेतावनी देगा - अनावश्यक रिटर्न स्टेटमेंट


4
  • खैर, पहले System.exit (0) का उपयोग प्रोग्राम को समाप्त करने के लिए किया जाता है और नीचे दिए गए कथन सही नहीं हैं, हालांकि कंपाइलर कोई त्रुटि नहीं देता है।
  • एक प्लेन return;का उपयोग शून्य रिटर्न प्रकार की विधि में किया जाता है ताकि निष्पादन का नियंत्रण उसकी मूल विधि में वापस आ सके।

यह वास्तव में अजीब है। मुझे उम्मीद है कि संकलक ने "अनुपलब्ध कोड" त्रुटि को फेंक दिया होगा।
user3932000

कंपाइलर को पता नहीं है कि System.exit (0) क्या करता है (और न ही इसे ऐसी कोई धारणा बनानी चाहिए, क्योंकि आप System.exit () के एक अलग कार्यान्वयन को लोड करने के लिए तकनीकी रूप से कुछ ClassLoader जादू कर सकते हैं जो इसे बाहर निकलने का कारण नहीं बनता है ),
डेविड लियू

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