"À. Anh đây rồi. Tôi tìm anh nãy giờ."

"Có chuyện gì xảy ra à?"

"Không, nhưng chúng tôi vẫn đang học."

"Được. Tôi đang nghe đây."

"Tôi muốn nói với bạn một vài điều nữa về các trường hợp ngoại lệ:"

"Trong Java 7, cấu trúc try-catch được mở rộng một chút thông qua việc bổ sung nhiều khối catch. Hãy xem ví dụ sau:"

java5
try
{}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
java7
try
{}
 catch (IOException | SQLException ex)
{
 logger.log(ex);
 throw ex;
}

"Vậy bây giờ chúng ta có thể viết nhiều ngoại lệ được phân tách bằng toán tử OR ('|' là OR nhị phân) không?"

"Đúng vậy. Không tiện sao?"

"Hmm. Nhưng loại đối tượng ngoại lệ bên trong khối catch là gì?"

"Xét cho cùng, một IOException có các phương thức của nó và một SQLException có các phương thức của nó."

"Loại ngoại lệ sẽ là loại của lớp tổ tiên chung của chúng."

"À. Nói cách khác, rất có thể nó sẽ là Exeption hoặc RuntimeException . Vậy thì tại sao không viết đơn giản là catch(Exception e)?"

"Đôi khi khi xử lý các lỗi riêng lẻ, sẽ thuận tiện khi nhóm chúng lại, ghi một số lỗi vào nhật ký, viết lại các lỗi khác và xử lý các lỗi khác theo một số cách khác."

"Nói cách khác, sơ đồ này được công nhận là giải quyết vấn đề khối bắt trùng lặp để xử lý các lỗi khác nhau."

"À. Tôi hiểu rồi. Cảm ơn, Ellie."

"Đó không phải là tất cả. Tôi muốn nói với bạn thêm một chút về khối cuối cùng ."

"Như bạn có thể đã biết, khối này luôn được thực thi."

"Và khi tôi nói luôn luôn, ý tôi là luôn luôn tuyệt đối ."

"Ví dụ:"

Ví dụ sử dụng cuối cùng
try
{
 return 1;
}
 finally
{
 return 0;
}

"Ở đây có một trả về trong khối thử và một trả về trong khối cuối cùng . Vì vậy, giá trị trả về của phương thức này sẽ là số 0."

" Khối cuối cùng sẽ thực thi bất kể điều gì xảy ra. Và câu lệnh trả về của nó sẽ ghi đè giá trị trả về khác bằng giá trị của chính nó."

"Tôi hiểu rồi."

"Tuy nhiên, một phương thức có thể trả về một giá trị hoặc đưa ra một ngoại lệ. "

"Vì vậy, nếu một giá trị được trả về trong một khối thử, nhưng khối cuối cùng đưa ra một ngoại lệ , thì kết quả sẽ là một ngoại lệ . "

"Điều gì sẽ xảy ra nếu một ngoại lệ được ném vào khối thử nhưng khối cuối cùng có câu lệnh trả về?"

"Sau đó, như thể phương thức hoạt động bình thường và giá trị trong câu lệnh return được trả về.

Ví dụ Kết quả
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
ngoại lệ thời gian chạy
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
IOException

"Lý do duy nhất mà phương thức cuối cùng có thể không được thực thi là do chương trình bị chấm dứt ngay lập tức bằng một lệnh gọi đến phương thức System.exit() ;."

Ví dụ
try
{
 System.exit(0);
 return 1;
}
 finally
{
 return 0;
}

"Tôi hiểu rồi."

"Hãy nhớ rằng tất cả những chủ đề này thường được hỏi trong các cuộc phỏng vấn, vì vậy sẽ rất tốt nếu bạn hiểu và ghi nhớ chúng."