मैं कुछ नए कोड की समीक्षा कर रहा हूं। कार्यक्रम में एक कोशिश है और अंततः केवल ब्लॉक है। चूंकि कैच ब्लॉक को बाहर रखा गया है, इसलिए अगर यह अपवाद या कुछ भी फेंकने योग्य होता है तो कोशिश कैसे ब्लॉक करती है? क्या यह सीधे अंत में ब्लॉक पर जाता है?जावा कोशिश करें अंत में कैच के बिना ब्लॉक
उत्तर
तो कोशिश ब्लॉक में कोड के किसी भी एक जाँच अपवाद फेंक सकते हैं, यह विधि हस्ताक्षर के खंड फेंकता में दिखाई देना चाहिए। यदि एक अनचेक अपवाद फेंक दिया जाता है, तो यह विधि से बाहर बुलबुला हुआ है।
आखिरकार ब्लॉक हमेशा निष्पादित होता है, चाहे कोई अपवाद फेंक दिया गया हो या नहीं।
पहला पैराग्राफ जरूरी नहीं है। कोशिश करें ब्लॉक को घोंसला जा सकता है। कोई भी अपवाद अपवाद, अनचेक या नहीं, विधि से बाहर बुलबुला होगा। –
ब्लॉक को नेस्टेड किया जा सकता है, लेकिन मैं इसकी अनुशंसा नहीं करता। मैं इस तरह से कोड नहीं लिखता। – duffymo
@ डफिमो: "विधि से बाहर बुलबुले" का क्या अर्थ है? – todayILearned
क्या आप इस कार्यक्रम के साथ प्रयास नहीं करते हैं? आखिरकार अंत में ब्लॉक को ब्लॉक और निष्पादित कर दिया जाएगा, लेकिन अपवाद को संभाला नहीं जाएगा। लेकिन, आखिरकार ब्लॉक में उस अपवाद को खारिज कर दिया जा सकता है!
अगर यह एक अपवाद या कुछ भी फेंकने योग्य
अपवाद किसी भी अन्य मामले में जहां यह पकड़ा नहीं कर रहा है के रूप में, ब्लॉक से बाहर फेंक दिया जाता है का सामना करना पड़ता कैसे कोशिश ब्लॉक काम करता है।
अंत में ब्लॉक कैसे कोशिश ब्लॉक से बाहर निकल गया है की परवाह किए बिना निष्पादित किया जाता है - क्या कोई कैच बिल्कुल कर रहे हैं, कि क्या वहाँ कोई मिलता-जुलता पकड़ है की परवाह किए बिना परवाह किए बिना कि।
पकड़ ब्लॉक और आखिरकार कोशिश ब्लॉक के ऑर्थोगोनल हिस्सों हैं। आप या तो दोनों हो सकते हैं। जावा 7 के साथ, आप न तो हो पाएंगे!
आखिरकार ब्लॉक हमेशा प्रयास समाप्त होने के बाद चलाया जाता है, चाहे अपवाद, एर, फेंकने योग्य होने के कारण सामान्य या असामान्य रूप से समाप्त हो जाए।
एक अपवाद कोशिश ब्लॉक के भीतर कोड के किसी भी द्वारा फेंका जाता है, तो वर्तमान पद्धति बस फिर से फेंकता है (या फेंक करने के लिए जारी) (अंत में ब्लॉक चलाने के बाद) एक ही अपवाद।
अंत में ब्लॉक एक अपवाद/त्रुटि/फेंकने योग्य फेंकता है, और एक लंबित फेंकने योग्य, यह बदसूरत हो जाता है पहले से ही वहाँ है। काफी स्पष्ट रूप से, मैं वास्तव में भूल जाता हूं कि क्या होता है (मेरे प्रमाणीकरण साल पहले)। I सोचें दोनों फेंकनेबल एक साथ जुड़े हुए हैं, लेकिन कुछ विशेष वूडू है जो आपको करना है (यानी - एक विधि कॉल जिसे मुझे देखना होगा) "आखिरकार" बारफेड, एर, फेंकने से पहले मूल समस्या प्राप्त करने के लिए।
संयोग से, कोशिश/अंत में संसाधन प्रबंधन के लिए क्या करने के लिए एक बहुत ही आम बात है, के बाद से जावा कोई विनाशकर्ता है।
उदा। -
r = new LeakyThing();
try { useResource(r); }
finally { r.release(); } // close, destroy, etc
"अंत में", एक और टिप: यदि आप कर एक पकड़ने में डालने के लिए परेशान है, या तो पकड़ विशिष्ट (उम्मीद) फेंकने योग्य उपवर्गों, या सिर्फ "फेंकने योग्य", को पकड़ने के नहीं "अपवाद" , एक सामान्य पकड़-सभी त्रुटि जाल के लिए।इस तरह के प्रतिबिंब goofs के रूप में भी कई समस्याओं,, "त्रुटियां", बल्कि "अपवाद" से फेंक, और उन किसी भी "सभी पकड़ने" कोडित द्वारा सही पर्ची जाएगा के रूप में:
catch (Exception e) ... // doesn't really catch *all*, eh?
इस बजाय कार्य करें:
catch (Throwable t) ...
बदसूरत हिस्से के लिए नीचे कार्लोस हेबरर द्वारा उत्तर देखें। –
आखिरकार ब्लॉक को पूरा करने के बाद ब्लॉक को निष्पादित किया जाता है। अगर कोशिश ब्लॉक के अंदर कुछ फेंक दिया जाता है तो आखिरकार ब्लॉक को छोड़ दिया जाता है।
try
/finally
पर एक छोटा सा ध्यान दें: अंत में हमेशा निष्पादित करेंगे जब तक
System.exit()
कहा जाता है।- जेवीएम दुर्घटनाग्रस्त हो जाता है।
try{}
ब्लॉक कभी समाप्त नहीं होता है (उदा। अंतहीन पाश)।
'try {..} पकड़ें {throw ..} अंत में {..}' के बारे में क्या? मुझे लगता है कि आखिर में – sbeliakov
निष्पादित नहीं किया जाएगा, उस स्थिति में अंततः अभी भी बुलाया जाएगा। केवल मूल अपवाद खो गया है। –
अंत में यदि आप System.exit() को पहले कॉल करते हैं तो भी निष्पादित नहीं किया जाएगा। –
जावा भाषा विशिष्टता (1) का वर्णन करता है try-catch-finally
कैसे क्रियान्वित किया जाता है। कोई पकड़ नहीं होने के कारण दिए गए थ्रोबल को पकड़ने में सक्षम पकड़ने के बराबर नहीं है।
- कोशिश ब्लॉक के निष्पादन एक मूल्य के वी के थ्रो की वजह से अचानक पूरा करता है, तो वहाँ एक विकल्प है:
- तो वी के रन-टाइम प्रकार के पैरामीटर के लिए आबंटित है कोशिश बयान के किसी भी पकड़ खंड, फिर ...
...- तो वी के रन-टाइम प्रकार कोशिश बयान के किसी भी पकड़ खंड के पैरामीटर के लिए आबंटित नहीं है, तो अंत में ब्लॉक निष्पादित किया जाता है।
- अंत में ब्लॉक सामान्य रूप से पूरा करता है, तो कोशिश बयान मूल्य वी
- हैं की एक फेंक अंत में ब्लॉक कारण S के लिए अचानक पूरा करता है, तो कोशिश बयान की वजह से अचानक पूरा करता है: तो फिर वहाँ एक विकल्प है कारण एस के लिए अचानक समाप्त होता है (और मूल्य वी का फेंक त्याग दिया जाता है और भूल जाता है)।
भीतरी अंत से पहले बाहरी ब्लॉक करने के लिए अपवाद फेंक करने के लिए मार डाला जाता है। संस्करण 7 से पहले
A
B
X
Y
Z
जावा संस्करणों में
public class TryCatchFinally {
public static void main(String[] args) throws Exception {
try{
System.out.println('A');
try{
System.out.println('B');
throw new Exception("threw exception in B");
}
finally
{
System.out.println('X');
}
//any code here in the first try block
//is unreachable if an exception occurs in the second try block
}
catch(Exception e)
{
System.out.println('Y');
}
finally
{
System.out.println('Z');
}
}
}
परिणाम कोशिश पकड़ने के अंत में इन तीन संयोजन के लिए अनुमति देते हैं ...
try - catch
try - catch - finally
try - finally
finally
ब्लॉक हमेशा क्या try
या/और catch
ब्लॉक में हो रहा है की कोई बात नहीं है निष्पादित किया जाएगा। इसलिए यदि catch
ब्लॉक नहीं है, तो अपवाद यहां संभाला नहीं जाएगा।
हालांकि, आपको अभी भी अपने कोड में अपवाद हैंडलर की आवश्यकता होगी - जब तक कि आप अपना आवेदन पूरी तरह से क्रैश नहीं करना चाहते। यह आपके आवेदन की आर्किटेक्चर पर निर्भर करता है जहां वह हैंडलर है।
- जावा कोशिश ब्लॉक या तो पकड़ द्वारा पालन किया जाना चाहिए या अंत में ब्लॉक।
- प्रत्येक प्रयास ब्लॉक के लिए शून्य या अधिक पकड़ ब्लॉक हो सकते हैं, लेकिन केवल एक अंत में अवरुद्ध हो सकता है।
- अंत में ब्लॉक निष्पादित नहीं किया जाएगा यदि प्रोग्राम बाहर निकलता है (या तो System.exit() को कॉल करके या घातक त्रुटि उत्पन्न करने से प्रक्रिया को समाप्त करने का कारण बनता है)।
"संस्करण 7 अनुमति से पहले" क्या आप यह कह रहे हैं कि जावा 7 और जावा 8 इन तीन संयोजनों की अनुमति नहीं देते हैं? मुझे संदेह है कि आपका मतलब क्या है, लेकिन यही आपके उत्तर का तात्पर्य है। – Aaron
आखिरकार ब्लॉक को निष्पादित किया गया है यदि कोशिश ब्लॉक में वापसी विवरण है? – Rahul
@ राहुल हां, आखिरकार बुलाया जाएगा। रेफरी: http://stackoverflow.com/questions/65035/does-finally-always-execute-in-java – roottraveller
- 1. कोशिश कैच ब्लॉक
- 2. कोशिश करें .. कैच ब्लॉक पकड़ा गया है
- 3. कैच ब्लॉक जावा के
- 4. कैच की कोशिश करें
- 5. कोशिश/आखिरकार (कैच के बिना) अपवाद बबल होगा?
- 6. स्कैला की "कोशिश" का अर्थ कैच या आखिरकार ब्लॉक के बिना क्या होता है?
- 7. कैच ब्लॉक में प्रतीक्षा
- 8. कैच ब्लॉक
- 9. कैच ब्लॉक
- 10. कैच ब्लॉक
- 11. कैच ब्लॉक
- 12. कैच ब्लॉक में वापसी?
- 13. जावा का बेंचमार्क आज़माएं/कैच ब्लॉक
- 14. जावा के कोशिश पकड़ने के अंत में तंत्र
- 15. मैं जावा के दशक में अंत में ब्लॉक का उपयोग करना चाहिए जब कोशिश पकड़ने के अंत में
- 16. पायथन कोशिश-अंत में
- 17. जावा पहुंच योग्य कैच ब्लॉक कंपाइलर त्रुटि
- 18. अंततः ब्लॉक को पकड़ने के लिए अंत में ब्लॉक करें
- 19. अंत में ब्लॉक
- 20. जावा अंत में धारा
- 21. कैच में वापसी कथन का व्यवहार और अंत में
- 22. "वापस" और "कोशिश-पकड़ने के अंत में" ब्लॉक मूल्यांकन स्केला में
- 23. प्रयास करें-पकड़ने के अंत में और उसके बाद फिर एक कोशिश पकड़
- 24. 'उपयोग' में कैच ब्लॉक क्यों नहीं है?
- 25. 'अंत में' Iterators में ब्लॉक
- 26. कोशिश/पकड़ ब्लॉक का उपयोग कब करें?
- 27. प्रदर्शन आज़माएं/कैच ब्लॉक की लागत
- 28. "कैच" या "आखिरकार" में दायरे में "कोशिश" में घोषित चर क्यों नहीं हैं?
- 29. जावास्क्रिप्ट त्रुटि कोशिश के साथ निपटने .. पकड़ने .. अंत में
- 30. ट्राई/अंत में ब्लॉक सवाल
[कोशिश अंत में और कोशिश-पकड़ के बीच अंतर] (http://stackoverflow.com/questions/2854910/difference-between-try-finally-and-try-catch) –
के संभावित डुप्लिकेट @ एमपी हर किसी को कोड समीक्षा करनी चाहिए और उनसे प्रश्न पूछना चाहिए कि कैसे सीखना और सुधार करना है। –