Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Finally block có luôn được thực thi trong Java không?


Có, finally block luôn được thực thi trừ khi có abnormal program termination do JVM crash hoặc gọi System.exit().

  • Finally block luôn thực thi dù exception có xảy ra hay không.
  • Nếu exception xảy ra như đóng file hoặc DB connection, finally block dùng để clean up code.
  • Không thể nói finally block luôn execute vì đôi khi nếu có statement như System.exit() hoặc code tương tự trong try block thì chương trình sẽ tự terminate và finally block sẽ không execute trong trường hợp này.
  • Finally block sẽ không execute do các điều kiện khác như khi JVM hết bộ nhớ, java process bị kill forcefully từ task manager hoặc console, máy tắt do mất điện và deadlock condition trong try block.

Ví dụ 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"); 
        } 
    } 
}

Trong ví dụ trên, finally block luôn thực thi nếu exception xảy ra hay không.

Kết quả

3 finally block is always executed

Ví dụ 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"); 
        } 
    } 
}

Trong ví dụ trên, finally block sẽ không execute do điều kiện System.exit(1) trong try block.

Kết quả

I am in try block