হ্যাঁ, finally ব্লক সবসময় এক্সিকিউট হয় যদি না কোনো অ্যাবনরমাল প্রোগ্রাম টার্মিনেশন হয় যা বা तो JVM ক্র্যাশ থেকে বা System.exit() কল থেকে ফলাফল।
- একটি finally ব্লক সবসময় এক্সিকিউট হয় এক্সেপশন ঘটেছে কিনা তার ওপর নির্ভর না করে।
- যদি এক্সেপশন ঘটে যেন ফাইল ক্লোজ বা DB কানেকশন ক্লোজ, তবে finally ব্লক ব্যবহার করা হয় ক্লিন-আপ কোডের জন্য।
- আমরা বলতে পারি না finally ব্লক সবসময় এক্সিকিউট হয় কারণ কখনো কখনো যদি try ব্লকে System.exit() বা সেমিলার কোড লেখা থাকে, প্রোগ্রাম অটোমেটিক্যালি টার্মিনেট হয়ে যাবে এবং finally ব্লক এই কেসে এক্সিকিউট হবে না।
- finally ব্লক এক্সিকিউট হয় না অন্যান্য কন্ডিশনও যেন: JVM মেমরি আউট হলে, যখন আমাদের জাভা প্রসেস টাস্ক ম্যানেজার বা কনসোল থেকে ফোর্সফুলি কিল করা হয়, যখন মেশিন পাওয়ার ফেইলিউরে শাট ডাউন হয় এবং try ব্লকে ডেডলক কন্ডিশন।
উদাহরণ ১
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
উদাহরণ ২
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