Joshua Bloch trong " Java hiệu quả " đã nói rằng
Sử dụng các ngoại lệ được kiểm tra cho các điều kiện có thể phục hồi và ngoại lệ thời gian chạy cho các lỗi lập trình (Mục 58 trong phiên bản 2)
Hãy xem tôi hiểu điều này có đúng không.
Dưới đây là sự hiểu biết của tôi về một ngoại lệ được kiểm tra:
try{
String userInput = //read in user input
Long id = Long.parseLong(userInput);
}catch(NumberFormatException e){
id = 0; //recover the situation by setting the id to 0
}
1. Ở trên có được coi là một ngoại lệ được kiểm tra không?
2. RuntimeException có phải là ngoại lệ không được kiểm tra không?
Dưới đây là sự hiểu biết của tôi về một ngoại lệ không được kiểm soát:
try{
File file = new File("my/file/path");
FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){
//3. What should I do here?
//Should I "throw new FileNotFoundException("File not found");"?
//Should I log?
//Or should I System.exit(0);?
}
4. Bây giờ, không phải mã trên cũng là một ngoại lệ được kiểm tra? Tôi có thể cố gắng phục hồi tình hình như thế này? Tôi có thể? (Lưu ý: câu hỏi thứ 3 của tôi nằm trong phần catch
trên)
try{
String filePath = //read in from user input file path
File file = new File(filePath);
FileInputStream fis = new FileInputStream(file);
}catch(FileNotFoundException e){
//Kindly prompt the user an error message
//Somehow ask the user to re-enter the file path.
}
5. Tại sao mọi người làm điều này?
public void someMethod throws Exception{
}
Tại sao họ để bong bóng ngoại lệ lên? Không xử lý lỗi sớm hơn tốt hơn? Tại sao bong bóng lên?
6. Tôi có nên tạo ra ngoại lệ chính xác hoặc che giấu nó bằng Exception không?
Dưới đây là bài đọc của tôi
Khi nào nên chọn ngoại lệ được kiểm tra và không được kiểm tra
DataSeries
lớp chứa dữ liệu luôn phải theo thứ tự dựa trên thời gian. Có một phương pháp để thêm một cái mớiDataPoint
vào cuối aDataSeries
. Nếu tất cả các mã của tôi hoạt động chính xác trong suốt dự án,DataPoint
không bao giờ nên thêm mã vào cuối có ngày trước với mã đã kết thúc. Mỗi mô-đun trong toàn bộ dự án được xây dựng với sự thật này. Tuy nhiên, tôi kiểm tra điều kiện này và ném một ngoại lệ không được kiểm tra nếu nó xảy ra. Tại sao? Nếu nó xảy ra, tôi muốn biết ai đang làm điều này và sửa nó.