Giống như một nhà tư vấn giỏi, tôi nói "nó phụ thuộc".
Nói chung trong Java, bạn có ý tưởng rõ ràng về tất cả các ngoại lệ có thể có tại một điểm cụ thể trong mã có thể là. Sẽ không có gì lạ khi thấy ai đó sử dụng
} catch (Exception e){
// log or stack trace
}
... bằng nhiều mã ném. Nói chung, mặc dù, bạn không nên bắt một ngoại lệ bạn không biết làm thế nào để xử lý hữu ích. (Không bao giờ, không bao giờ bao giờ, làm catch (Exception x) ;
, nghĩa là, chỉ cần vứt bỏ ngoại lệ. Không bao giờ.)
Điều khiển là hỏi "Tôi có thể làm gì với điều này?" Thông thường, một ngoại lệ không thể xử lý tệp có thể được xử lý bằng cách yêu cầu người dùng nơi tệp của anh ấy đã bị xóa. Một ngoại lệ tệp nén khó xử lý hơn. Do đó, bạn có thể muốn có những hành vi riêng biệt.
Mặt khác, nếu đó là chương trình dòng lệnh, bạn có thể không muốn gì hơn là thông báo lỗi trong cả hai trường hợp.
Một số lời khuyên khác; không tạo ra một dấu vết ngăn xếp trong mã "cutomer phải đối mặt" - mã mà một người không lập trình có thể thấy. Nonprogrammers có xu hướng nhìn vào compleities của một dấu vết stack và hoảng sợ. Tốt hơn là dịch ngoại lệ cho một thông báo như "Tên tệp" không tìm thấy. " và, nếu bạn thực sự muốn một dấu vết ngăn xếp, ose đăng nhập để gửi nó để gỡ lỗi cấp đầu ra.
Nguồn
2009-05-21 19:40:05
Trạng thái không phù hợp, tôi tin rằng cuối cùng khối luôn thực thi trong Java khi ngoại lệ bay lên ngăn xếp, bất kể ngoại lệ có bị bắt hay không. Vì vậy, ngay cả khi bạn cẩn thận không bắt các ngoại lệ "gây tử vong" để tránh thực thi khi ở trạng thái không nhất quán, bạn không có cách nào để ngăn chặn việc thực thi khối cuối cùng của mình.Vì vậy, IMO đây là một điểm tranh luận trong JRE, trừ khi bạn tránh việc sử dụng các khối cuối cùng, mà có vẻ như một điều khủng khiếp phải từ bỏ. .NET CLR là khác nhau - bạn có tùy chọn để hủy bỏ TRƯỚC KHI cuối cùng các khối chạy nếu có một ngoại lệ chưa được giải quyết. –