मैं एक जावा रूकी हूं और मैं सोच रहा था, अगर मैं निम्नलिखित ठेठ जावा कोडजावा में, "आखिरकार" ब्लॉक को कॉल करने की गारंटी है (मुख्य विधि में)?
public class MyApp {
public static void main(String[] args) {
try {
// do stuff
} catch {
// handle errors
} finally {
// clean up connections etc.
}
}
}
है JVM गारंटी नहीं है कि अंत में ब्लॉक हमेशा चलाया जाएगा करता है? यह समझने के लिए कि मैं कहां से आ रहा हूं, मुझे सी/सी ++ प्रोग्रामों में उपयोग किया जाता है जो कि यदि आप एक पूर्ण पॉइंटर को अस्वीकार करते हैं तो आप क्रैश हो सकते हैं और उसके बाद आपके पास कोई कोड नहीं चल सकता है।
लेकिन जैसा कि मैं सामान्य रूप से जावा और पूरे जीसी/प्रबंधित मेमोरी व्यवसाय को समझता हूं, वहां शून्य सूचक सूचक के रूप में ऐसी कोई चीज़ नहीं है, सब कुछ एक आकर्षक निष्पादन है, इसलिए मेरे प्रोग्राम को क्रैश करने का वास्तव में कोई तरीका नहीं है यह आखिरकार छोड़ देता है, या वहां है? उदाहरण के लिए, पायथन में, मैं आमतौर पर
try:
# do stuff
except AnExceptionIKnewMightHappen:
# react in an appropriate way
except:
# log that weird error I had not known could happen
करते हैं और मैं अपने कोड के माध्यम से गुजर बिना किसी भी अनुप्रयोग मरने था कभी नहीं किया है।
बेशक, यदि किसी कारण से ओएस प्रक्रिया को मारता है (या अगर प्लग को खींचने की तरह पूरे सिस्टम को मारता है) तो जावा बहुत कुछ नहीं कर सकता है। इसके अलावा, PHP से मैं गैर-पकड़ने योग्य त्रुटियों को जानता हूं जिनके खिलाफ आप रक्षा नहीं कर सकते हैं, भले ही दुभाषिया अभी भी हुआ था (कम से कम यह एक उचित संदेश आउटपुट करने में सक्षम है)।
संपादित करें: बस स्पष्टता के लिए (यह वास्तव में किसी के द्वारा गलत समझा नहीं था), मुझे जोड़ने कि मैं चीजों को मेरी कोड अंदर है कि करने के लिए अंत में नजरअंदाज किया जा रहा ले जा सकता है की तलाश में गया था। तो System.exit को इंगित करना एक सहायक अनुस्मारक था, भले ही मैं नहीं देख पा रहा हूं कि मैं ऐसा कुछ क्यों करना चाहता हूं।
जेवीएम निकालना एक स्पष्ट तरीका है और मैं इसे बाहरी कारण के रूप में गिनता हूं। नोट यह इंगित करता है कि आपको जेवीएम और ऐप चलने के दौरान बाहर निकलने वाले धागे की संभावना को भी याद रखना होगा, क्योंकि यह अब भी मेरे लिए स्पष्ट प्रतीत होता है, लेकिन मैंने इसके बारे में सोचा नहीं था।
जी, यह तेज़ उत्तर था। जाहिर है एक बहुत ही नोब सवाल। फिर भी धन्यवाद! –
उत्तर नहीं है, यहां विवरण देखें: http://tshikatshikaaa.blogspot.nl/2012/07/about-using-systemexit-in-try-catch.html – JVerstry