2011-06-30 26 views
9

Trong readFileMethod1, một IOException được nắm bắt rõ ràng trước khi ném nó ở cấp phương thức để đảm bảo rằng khối finally được thực thi. Tuy nhiên, nó là cần thiết để bắt ngoại lệ? Nếu tôi xóa khối catch, được hiển thị trong readFileMethod2, thì khối finally cũng có được thực hiện không?Java cuối cùng chặn và ném ngoại lệ ở cấp phương thức

private void readFileMethod1() throws IOException { 
    try { 
     // do some IO stuff 
    } catch (IOException ex) { 
     throw ex; 
    } finally { 
     // release resources 
    } 
} 

private void readFileMethod2() throws IOException { 
    try { 
     // do some IO stuff 
    } finally { 
     // release resources 
    } 
} 
+0

Tôi sắp tự hỏi câu hỏi này. Ghi nhớ tinh thần. – JohnMerlino

Trả lời

7

finally vẫn được thực hiện, bất kể bạn có bắt IOException hay không. Nếu tất cả các khối catch của bạn làm là rethrow, sau đó nó không phải là cần thiết ở đây.

4

Không, hoàn toàn không cần thiết để bắt ngoại lệ nếu bạn không định làm gì ngoài việc ném nó.

Và có, khối cuối cùng sẽ vẫn được thực thi.

2

Không, bạn không cần phải nắm bắt ngoại lệ trừ khi bạn không thể tính lại nó trong phương pháp của mình. Trong mã bạn đăng readFileMethod2 là tùy chọn đúng để làm theo.

1

cuối cùng được thực hiện luôn cho dù một ngoại lệ được ném hay không. Chỉ khi JVM bị tắt trong khi thực thi khối try hoặc khối catch, thì mệnh đề cuối cùng sẽ không được thực thi. Tương tự như vậy, nếu luồng thực hiện mã try hoặc catch bị gián đoạn hoặc bị hủy, khối cuối cùng có thể không thực thi ngay cả khi ứng dụng vẫn tiếp tục.

Các vấn đề liên quan