Java: Solution phần Exception
Giải phóng thời gian, khai phóng năng lực
Xin xem phần câu hỏi và bài tập tại ĐÂY.
Solution phần Câu hỏi
- Trả lời: Hợp lệ - và rất hữu ích. Khối
try
không cần phải có khốicatch
nếu nó đã có khốifinally
. Nếu mã lệnh trong khốitry
có nhiều điểm thoát và không có liên quan đếncatch
, thì mã lệnh trong khốifinally
được thực hiện mà không quan tâm đến vấn đề khốitry
đã thoát thế nào và có thoát được hay không. Do đó, trong khốifinally
nên chứa mã lệnh mà luôn luôn có thể thực thi được dù bất kỳ điều gì xảy ra. Thường thì mã lệnh liên quan đến các tài nguyên mã phục hồi, chẳng hạn như mã đóng luồng nhập/xuất. -
Trả lời: Trình xử lý này bắt các ngoại lệ có kiểu
Exception
; do đó, nó sẽ bắt được bất kỳ loại ngoại lệ nào. Điều này có thể dẫn đến sự thực thi nghèo nàn, tức là ta có thể mất đi thông tin về kiểu ngoại lệ được ném ra hay nói cách khác là ta không biết được chính xác ngoại lệ ném ra là gì và làm cho mã lệnh của bạn kém hiệu quả. Kết quả là, chương trình của bạn có thể ở tình trạng bị buộc phải xác định kiểu ngoại lệ trước khi nó có thể quyết định cách thức phục hồi tốt nhất. - Trả lời: Trình xử lý đầu tiên sẽ bắt những ngoại lệ có kiểu
Exception
, tức là nó có thể bắt bất kỳ ngoại lệ nào, bao gồm cả ngoại lệArithmeticException
. Như vậy thì trình xử lý sự kiện thứ hai không bao giờ được dùng, tức là đoạn mã trong trình xử lý thứ hai sẽ không được biên dịch. -
Trả lời:
- 3 (lỗi biên dịch). Mảng không được khởi tạo và sẽ không biên dịch được.
- 1 (lỗi).
- 4 (không có ngoại lệ). Khi bạn đọc một luồng thì bạn mong muốn đọc được một dấu kết thúc luồng. Bạn nên sử dụng ngoại lệ để bắt hành vi bất ngờ trong chương trình của bạn.
- 2 (ngoại lệ checked).
Solution phần bài tập
-
Trả lời: Xin mời xem ví dụ
.ListOfNumbers2
-
Trả lời: Đoạn mã bắt ngoại lệ được thể hiện ở phần làm đậm:
public static void cat(File file) {
RandomAccessFile input = null;
String line = null;try {
input = new RandomAccessFile(file, "r");
while ((line = input.readLine()) != null) {
System.out.println(line);
}
return;
} catch(FileNotFoundException fnf) {
System.err.format("File: %s not found%n", file);
} catch(IOException e) {
System.err.println(e.toString());
} finally {
if (input != null) {
try {
input.close();
} catch(IOException io) {
}
}
}
}
Giải phóng thời gian, khai phóng năng lực