2009-02-12 23 views
55

सी-जैसे वाक्यविन्यास वाली भाषाओं के मामले में, हम मुख्य() विधि को एक int या float value (या शून्य) वापस करने के लिए घोषित करते हैं। जावा में मुख्य() से एक गैर-शून्य रिटर्न प्रकार घोषित करना संभव है? यदि नहीं, तो क्यों नहीं? क्या इसका मतलब यह है कि जावा प्रोग्राम ओएस पर कोई मूल्य नहीं लौटाता है?जावा शून्य में मुख्य() क्यों है?

+4

'मुख्य' किस भाषा में एक फ़्लोटिंग-पॉइंट मान देता है? –

+0

चूंकि इस प्रश्न का शीर्ष वोट दिया गया जवाब इंगित करता है, इसके लिए एक तकनीकी कारण है, इसलिए यह मुख्य रूप से राय आधारित नहीं है। – Raedwald

उत्तर

7

आप System.exit() के साथ एक int वापस कर सकते हैं।

एक पूर्णांक के अलावा कुछ भी लौटने से ज्यादा समझ नहीं आती है, क्योंकि ओएस एक पूर्णांक की अपेक्षा करता है। यदि कुछ भी वापस नहीं किया जाता है तो डिफ़ॉल्ट 0 होता है, जिसका अर्थ ठीक है। अन्य मान आमतौर पर त्रुटियों या विशेष परिस्थितियों को सिग्नल करने के लिए उपयोग किया जाता है।

27

This एक ही विषय पर velocityreviews पर एक दिलचस्प चर्चा है:

हाइलाइट:

संयोग से, इस सी और C++ सिर्फ इसलिए यह गलत मुख्य के लिए हस्ताक्षर है बुरा शैली माना जाता है , किसी भी सार्वभौमिक कारण प्रोग्रामिंग भाषाओं से स्वतंत्र नहीं है। यह उन चीजों में से एक है जो वास्तव में काम नहीं करना चाहिए, लेकिन आपके कार्यान्वयन पर हो सकता है।

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

द्वारा

www.designacourse.com सबसे आसान तरीका लिखा कोई भी ट्रेन ... कहीं भी। क्रिस स्मिथ - लीड सॉफ्टवेयर डेवलपर/तकनीकी ट्रेनर MindIQ निगम

66

main() विधि वास्तव में एक void वापसी प्रकार होना आवश्यक है।

विधि main public, static घोषित किया जाना चाहिए, और void: (§12.1.4) - "वर्चुअल मशीन स्टार्ट-अप निष्पादन" पर Java Language Specification से। यह एक भी तर्क तार का एक सरणी है कि स्वीकार करना चाहिए।

यह वर्णन करने के लिए पर चला जाता है जब में एक कार्यक्रम बाहर निकलता है "निष्पादन - कार्यक्रम से बाहर निकलें" (§12.8):

जब दो चीजों में से एक होता है एक प्रोग्राम अपने सभी गतिविधि और बाहर निकलता है समाप्त हो जाता है :

  • सभी थ्रेड जो डेमॉन थ्रेड समाप्त नहीं होते हैं।
  • कुछ धागा वर्ग Runtime या वर्ग System और बाहर निकलने आपरेशन के exit विधि invokes सुरक्षा प्रबंधक द्वारा निषिद्ध नहीं है।

दूसरे शब्दों में, कार्यक्रम से पहले या main विधि पूर्ण होने के बाद बाहर निकल सकते हैं; main से वापसी मूल्य इसलिए अर्थहीन होगा। आप इस कार्यक्रम वाला स्थिति कोड, वापस जाने के लिए निम्न विधियों का फोन (ध्यान दें कि तीनों विधियों सामान्य रूप से कभी वापस नहीं) चाहते हैं:

  • System.exit(int status) - Runtime.getRuntime().exit(status)
  • Runtime.exit(int status) के बराबर - समाप्त हो जाता है वर्तमान में चल JVM अपने शट डाउन अनुक्रम को शुरू करके (सभी आवश्यक shutdown hooks चलाएं, और uninvoked finalizers, यदि आवश्यक हो)। एक बार यह किया जाता है JVM रोकता है।
  • Runtime.halt(int status) - जबरन वर्तमान में चल रहे JVM को समाप्त करता है।

तीन में से System.exit() जेवीएम को समाप्त करने का पारंपरिक और सबसे सुविधाजनक तरीका है।

22

void वापसी प्रकार के रूप में होने main विधि के लिए कारण यह है कि एक बार main खत्म, यह जरूरी नहीं है कि पूरे कार्यक्रम समाप्त हो गया है। यदि main नए थ्रेड स्पॉन्स करता है, तो ये थ्रेड प्रोग्राम चलते रह सकते हैं। main का रिटर्न प्रकार इस बिंदु पर ज्यादा समझ में नहीं आता है।

उदाहरण के लिए, इस घुमाओ अनुप्रयोगों, जहां main प्रक्रिया आम तौर पर स्विंग धागे पर एक जीयूआई शुरू होता है, और उसके बाद main खत्म में बहुत आम है ... लेकिन कार्यक्रम अभी भी चल रहा है।

+0

पीटर, क्या आप स्वयं के लिए स्पष्टीकरण दे सकते हैं (वर्तमान में जावा मल्टीथ्रेडिंग की खोज कर रहे हैं) ... क्या यह केवल डेमॉन थ्रेड है जिसे मुख्य() को बाहर निकालने की अनुमति नहीं है? – Max

+5

@ मैक्स: नहीं, मुख्य() विधि का JVM पर कोई नियंत्रण नहीं है। जब JVM प्रारंभ होता है, तो यह मुख्य() विधि चलाएगा, लेकिन जब मुख्य() समाप्त होता है, तो इसका मतलब यह नहीं है कि JVM टर्मिनल है। JVM तक सभी धागे निष्पादित करना जारी रखता है 1) Runtime.exit() को या 2 कहा जाता है) सभी सामान्य (डेमन नहीं) धागे की मृत्यु हो गई है। डेमॉन थ्रेड इस दूसरी स्थिति के लिए गिनती नहीं है। दूसरे शब्दों में ... यदि मुख्य() विधि कुछ सामान्य धागे उत्पन्न करती है, तो मुख्य() समाप्त होने पर JVM ** ** समाप्त नहीं होगा। यदि मुख्य() किसी भी थ्रेड को नहीं बढ़ाता है, तो JVM समाप्त हो जाएगा।यदि मुख्य() केवल डेमॉन थ्रेड स्पॉन्स करता है, तो मुख्य() समाप्त होने पर JVM भी समाप्त हो जाएगा। –

+0

पीट, स्पष्टीफ के लिए धन्यवाद। – Max

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