1. throw
nhà điều hành
Khi một ngoại lệ bị chặn bởi một catch
khối và cho đến khi nó được ném vào máy Java, nó chỉ là một đối tượng kế thừa Exception
(hay đúng hơn là Throwable
). Bản thân đối tượng ngoại lệ không có bất kỳ thuộc tính ma thuật nào.
Tất cả logic về cách hoạt động của các ngoại lệ chỉ là một cách đặc biệt mà máy Java hoạt động khi một ngoại lệ được ném vào nó.
Bạn luôn có thể vẽ lại một ngoại lệ bị bắt đối với máy Java. Để làm điều này, bạn cần sử dụng throw
toán tử:
throw exception;
Ví dụ:
Mã số | Đầu ra bảng điều khiển |
---|---|
|
|
Trong mã này, chúng tôi đã bắt gặp một ngoại lệ, hiển thị thông báo về nó trên màn hình và sau đó viết lại nó.
Một ngoại lệ được viết lại không thể bị bắt bởi catch
các khối khác trong cùng một try
khối.
2. Ngoại lệ của bạn
Nhân tiện, bạn có thể tự tạo một đối tượng ngoại lệ: nó chỉ là một đối tượng có kiểu Exception
hoặc một lớp kế thừa nó. Và ném nó.
Nó dễ dàng hơn âm thanh. Ví dụ:
Mã số | Đầu ra bảng điều khiển |
---|---|
|
|
Trong ví dụ trên, chúng ta đã tạo một đối tượng ngoại lệ mới có kiểu là RuntimeException
và ném nó ngay lập tức bằng cách sử dụng throw
toán tử.
Nó sẽ bị chặn ngay lập tức catch
, vì RuntimeException kế thừa Exception
. Đoạn catch (Exception except)
mã bắt các đối tượng ngoại lệ của tất cả các lớp kế thừa Exception
lớp đó.
3. finally
từ khóa
Một điểm quan trọng khác. Đôi khi một lập trình viên cần thực hiện một số hành động bất kể có ngoại lệ xảy ra trong mã hay không. Ví dụ: giả sử chúng tôi đã mở một tệp để viết. Tệp đã mở phải được đóng bằng cách gọi close()
.
try
{
// Code where an exception might occur
}
catch(ExceptionType name)
{
// Exception handling code
}
finally
{
// Code that must executed no matter what happens
}
Để thực hiện các hành động bắt buộc này, một loại khối khác ( finally
) đã được thêm vào try-catch
cấu trúc, do đó tạo try-catch-finally
cấu trúc. Nó trông như thế này:
Ví dụ:
FileInputStream source = null;
try
{
source = new FileInputStream("c:\\note.txt");
source.read();
}
catch(Exception except)
{
System.out.println("Caught the exception");
throw except;
}
finally
{
if (source != null)
source.close();
}
Mã trong finally
khối sẽ thực thi trong mọi trường hợp, bất kể có ngoại lệ hay không. Ngay cả khi một ngoại lệ được ném ra và không bị bắt, finally
khối vẫn sẽ thực thi.
Nhân tiện, nếu bạn không muốn bắt một ngoại lệ, nhưng bạn cần một finally
khối, hãy sử dụng ký hiệu tốc ký cho try-catch-finally
cấu trúc: một try-finally
khối. Nó trông giống như thế này:
try
{
// Code where an exception might occur
}
finally
{
// Code that must executed no matter what happens
}
GO TO FULL VERSION