Java: Xác định những ngoại lệ được ném bởi một phương thức
Giải phóng thời gian, khai phóng năng lực
Ở bài viết trước ta đã biết cách viết một trình xử lý ngoại lệ cho phương thức writeList
trong lớp ListOfNumbers
. Đôi khi, mã lệnh có thể thích hợp để bắt ngoại lệ có thể xảy ra bên trong nó. Tuy nhiên, trong trường hợp khác lại là tốt hơn để cho một phương thức chuyển tiếp lên call stack để xử lý ngoại lệ. Ví dụ, nếu bạn đang cung cấp lớp ListOfNumbers
như là một phần của một gói các lớp, thì bạn có thể không dự đoán được nhu cầu của tất cả những người sử dụng gói của bạn. Trong trường hợp này, tốt hơn là không bắt ngoại lệ và cho phép phương thức chuyển lên call stack để xử lý nó.
Nếu phương thức writeList
không bắt được những ngoại lệ checked có thể xảy ra bên trong nó, thì nó phải xác định rằng nó có thể ném được những ngoại lệ này. Hãy thay đổi phương thức writeList
ban đầu để xác định các ngoại lệ có thể ném thay vì bắt chúng. Nhắc lại, đây là phiên bản gốc của phương thức writeList
nên sẽ không biên dịch.
public void writeList() {
PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + list.get(i));
}
out.close();
}
Để xác định rằng writeList
có thể ném hai ngoại lệ, thì ta thêm một mệnh đề throws
tới khai báo phương thức cho phương thức writeList
. Mệnh đề throws
bao gồm từ khóa throws
và phía sau nó là các ngoại lệ phân tách nhau bằng dấu phảy (,) được ném bởi phương thức đó. Dưới đây là một ví dụ về việc sử dụng mệnh đề throws:
public void writeList() throws IOException, IndexOutOfBoundsException {
Ta cần nhớ rằng IndexOutOfBoundsException
là một ngoại lệ unchecked, do vậy việc đưa nó vào sau mệnh đề throws
là không bắt buộc, nên ta có thể viết lại tương đương như sau:
public void writeList() throws IOException {
Giải phóng thời gian, khai phóng năng lực