खैर, झुकाव का जवाब यह है कि भाषा का नमूना इसे मना करता है।
लेकिन चलिए थोड़ा सा कदम उठाएं और इसके बारे में सोचें - क्या होगा यदि आप कर सकते हैं?
try {
foo();
}
bar();
catch (Exception e) {
baz();
}
इस के अर्थशास्त्र क्या हो सकता है? अगर हम foo()
में अपवाद प्राप्त करते हैं, तो baz()
कहा जाता है? bar()
के बारे में क्या?यदि bar()
फेंकता है, तो क्या हम उस मामले में अपवाद पकड़ते हैं?
try {
foo();
} catch (Exception e) {
baz();
}
bar();
bar()
में अपवाद पकड़ा कर रहे हैं, और foo()
में अपवाद:
हैं bar()
में अपवाद पकड़े नहीं हैं, और foo()
में अपवाद चलने से bar()
रोकने के लिए, तो निर्माण बराबर करने के लिए है bar()
को चलने से रोकें, फिर निर्माण के बराबर है:
try {
foo();
bar();
} catch (Exception e) {
baz();
}
foo()
में
bar()
में अपवाद पकड़ा नहीं हैं, और अपवाद नहीं चलने से bar()
रोकने (bar()
हमेशा निष्पादित किया जाता है) करते हैं, तो निर्माण के बराबर है:
try {
foo();
} catch (Exception e) {
baz();
} finally {
bar();
}
आप देख सकते हैं , इस बीच-प्रयास-पकड़ निर्माण के लिए किसी भी उचित अर्थशास्त्र पहले से ही एक नए - और बल्कि भ्रमित - निर्माण की आवश्यकता के बिना व्यक्त किए जा सकते हैं। इस निर्माण के लिए एक अर्थ तैयार करना मुश्किल है जो पहले से ही अनावश्यक नहीं है।
एक अलग रूप में, एक संभावित कारण है कि हम ऐसा नहीं कर सकते हैं:
try {
foo();
} finally {
bar();
} catch (Exception e) {
baz();
}
हो सकता है कि यह वास्तविक निष्पादन के क्रम को प्रतिबिंबित नहीं करता - पकड़ ब्लॉक से पहले अंत में ब्लॉक चलाते हैं। यह उन संसाधनों का उपयोग करने के लिए कैच ब्लॉक को अनुमति देता है जो आखिरकार ब्लॉक बाद में रिलीज़ हो सकते हैं (उदाहरण के लिए, आरपीसी ऑब्जेक्ट या कुछ से अतिरिक्त डायग्नोस्टिक जानकारी का अनुरोध करने के लिए)। अन्य तरीके से काम करने के लिए भी बनाया जा सकता है? ज़रूर। यह इसके लायक है? शायद ऩही।
पहले प्रश्न का आपका उत्तर गलत है। संकलक यह नहीं सोचने वाला है कि कोई 'पकड़' ब्लॉक नहीं है। यह स्पष्ट रूप से अभी भी आपके कोड में है, और तथ्य यह है कि 'आखिरकार' ब्लॉक संकलन-समय त्रुटि के कारण सही होगा। – BoltClock
बोल्टक्लॉक सही है - आपको अपने पहले प्रश्न पर एक कंपाइलर त्रुटि मिलती है। * पकड़ * तुरंत * * कोशिश * – StuartLC
द्वारा किया जाना चाहिए कैच ब्लॉक सिंकैक्टिक रूप से प्रयास ब्लॉक के तुरंत बाद होना चाहिए। कोई अन्य कारण नहीं। – Sabbath