हां, finally ब्लॉक हमेशा निष्पादित होता है जब तक कि असामान्य प्रोग्राम टर्मिनेशन न हो जो या तो JVM क्रैश से या System.exit() कॉल से परिणामस्वरूप होता है।
- एक finally ब्लॉक हमेशा निष्पादित होता है चाहे अपवाद हुआ हो या नहीं।
- यदि फाइल बंद करने या DB कनेक्शन जैसा अपवाद होता है, तो finally ब्लॉक का उपयोग कोड को क्लीन अप करने के लिए किया जाता है।
- हम यह नहीं कह सकते कि finally ब्लॉक हमेशा निष्पादित होता है क्योंकि कभी-कभी यदि try ब्लॉक में System.exit() या इसी तरह का कोई कोड लिखा जाता है तो प्रोग्राम ऑटोमेटिकली टर्मिनेट हो जाएगा और finally ब्लॉक इस केस में निष्पादित नहीं होगा।
- finally ब्लॉक अन्य स्थितियों के कारण भी निष्पादित नहीं होगा जैसे जब JVM मेमोरी से बाहर निकलता है, जब हमारा जावा प्रोसेस टास्क मैनेजर या कंसोल से जबरदस्ती किल किया जाता है, जब हमारी मशीन पावर फेल्योर के कारण शट डाउन होती है और हमारे try ब्लॉक में डेडलॉक कंडीशन होती है।
उदाहरण 1
public class FinallyBlock {
public static void main(String args[]){
try {
int a=10,b=30;
int c = b/a;
System.out.println(c);
} catch(ArithmeticException ae){
System.out.println(ae);
} finally {
System.out.println("finally block is always executed");
}
}
}
उपरोक्त उदाहरण में, finally ब्लॉक हमेशा निष्पादित होता है यदि अपवाद हुआ है या नहीं।
आउटपुट
3 finally block is always executed
उदाहरण 2
public class FinallyBlock {
public static void main(String args[]) {
try {
System.out.println("I am in try block");
System.exit(1);
} catch(Exception ex){
ex.printStackTrace();
} finally {
System.out.println("I am in finally block");
}
}
}
उपरोक्त उदाहरण में, try ब्लॉक में System.exit(1) कंडीशन के कारण finally ब्लॉक निष्पादित नहीं होगा।
आउटपुट
I am in try block