2011-09-13 36 views
14

Khi nào tôi nên sử dụng đoạn mã Một thay vì đoạn B (tức là những gì là những lợi ích của việc sử dụng đoạn A) ?:Khi nào tôi nên sử dụng cuối cùng-block trong Java try-catch-cuối cùng

Snippet A:

try { 
    // codeblock A 
} 
catch (Exception ex) { 
    // codeblock B 
} 
finally { 
    //codeblock C 
} 

Snippet B:

try { 
    // codeblock A 
} 
catch (Exception ex) { 
    // codeblock B 
} 

//codeblock C 
+1

Related: http://stackoverflow.com/questions/3354823/how-to-use-finally – birryree

Trả lời

15

Sử dụng một khối finally nếu bạn có mã mà phải e xecute bất kể có ngoại lệ hay không.

Dọn dẹp các tài nguyên khan hiếm như kết nối cơ sở dữ liệu là một ví dụ điển hình.

+0

Đó cũng là phương pháp hay vì nó nêu rõ điều gì đang xảy ra, ví dụ: Bất kể thực thi chúng ta phải giải phóng tài nguyên x, v.v. – Tony

+0

Lưu ý, trong Java 7 bạn có thể sử dụng câu lệnh try-with-resources để đóng một số tài nguyên nhất định, vì vậy bạn sẽ không cần 'cuối cùng' trong trường hợp này. – dogbane

+1

@duffymo Nhưng sẽ không 'codeblock C' trong _snippet B_ cũng quan tâm đến điều này? – poplitea

1

Sẽ hữu ích nếu bạn cần thực hiện một số dọn dẹp, ví dụ: đóng kết nối cơ sở dữ liệu. Bởi vì "cuối cùng" được thực hiện luôn, bạn không cần phải sao chép-dán dễ bị lỗi của cùng một mã ở phần cuối của "thử" và cũng trong một hoặc nhiều khối "bắt".

3

Trường hợp hiển nhiên là khi bạn tăng hoặc ném một ngoại lệ khác trong khối catch của mình.

1

Bạn hầu như luôn luôn sử dụng đoạn mã cuối cùng sẽ chặn khi bạn có tài nguyên cần dọn dẹp trong cả hai trường hợp thành công hoặc lỗi. Một ví dụ điển hình là đối tượng kết nối jdbc phải luôn luôn được đóng (dọn dẹp) trong khối cuối cùng.

0

Hãy tưởng tượng có một tuyên bố return bên trong khối catch: các C khối sẽ không được thực hiện trong đoạn B, nhưng trong đoạn Một nó sẽ, trước khi trở về.

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