Chúng tôi tiếp tục giới thiệu về nâng cấp đối tượng trong java trong khóa học java này


Các lỗi

Thật tuyệt nếu như mã lệnh của chúng ta không bao giờ có bất kỳ sai sót nào nhưng điều này là phi thực tế. Đôi khi mọi thứ không xuôi chèo mát mái như ta muốn, và có những khi vấn đề xảy ra còn tệ hơn là việc sản sinh ra những kết quả không mong muốn. Khi điều đó xảy ra, JRE sẽ đưa ra một lỗi ngoại lệ (throws an exception). Ngôn ngữ này có bao gồm những câu lệnh đặc biệt cho phép bạn bắt lỗi và quản lý lỗi một cách thích hợp. Sau đây là khuôn dạng chung của những câu lệnh này:
PHP:
try {statement(s)
} catch ( 
exceptionType
name 
) {statement(s)
} finally {
statement(s)
}
Lệnh try bao bọc đoạn mã lệnh có thể gây ra lỗi. Nếu có lỗi, việc thi hành sẽ lập tức nhảy tới khối catch, cũng gọi là trình xử lý lỗi. Khi đã qua khối try và khối catch, việc thi hành sẽ tiếp tục đến khối finally, bất chấp việc liệu có lỗi xảy ra hay không. Khi bạn bắt được lỗi, bạn có thể thử phục hồi lại sau lỗi hoặc bạn có thể thoát ra khỏi chương trình (hay phương thức) một cách nhẹ nhàng.

Xử lý lỗi

Thử ví dụ sau trong main():
PHP:
public static void main(String[] args) {Adult myAdult = new Adult();
 
myAdult.addMoney(1);String wontWork = (String) myAdult.getWallet().get(0);
}
Khi chúng ta chạy mã lệnh này, chúng ta sẽ nhận được báo lỗi. Màn hình sẽ hiển thị như sau:
PHP:
java.lang.ClassCastException
at intro
.core.Adult.main(Adult.java:19)Exception in thread "main"

Lưu vết của ngăn xếp sẽ báo cho biết kiểu của lỗi và số hiệu của dòng xuất hiện lỗi. Hãy nhớ rằng chúng ta phải ép kiểu (cast) khi gỡ bỏ một Object khỏi sưu tập. Chúng ta có sưu tập các đối tượng Integer nhưng chúng ta đã thử lấy đối tượng thứ nhất bằng lệnh get(0) (trong đó 0 là chỉ số của phần tử đầu tiên trong danh sách vì danh sách bắt đầu từ 0, cũng như mảng) và ép kiểu nó thành String. Môi trường chạy thi hành của Java sẽ kêu ca vì lỗi này. Lúc đó thì chương trình sẽ ngừng. Hãy làm sao để nó chấm dứt nhẹ nhàng hơn bằng cách xử lý lỗi này:

PHP:
try {
 
String wontWork = (String) myAdult.getWallet().get(0);

} catch (
ClassCastException e) {
 
System.out.println("You can't cast that way.");

}
Tại đây chúng ta bắt lỗi và in ra một thông báo lịch sự. Một cách khác là ta có thể không làm gì trong khối catch, in ra thông báo lịch sự trong khối finally, nhưng điều đó không cần thiết. Trong một vài trường hợp, đối tượng lỗi (thường có tên khởi đầu bằng e hoặc ex, nhưng không nhất thiết phải thế) có thể cung cấp cho bạn nhiều thông tin hơn về lỗi, chúng có thể giúp bạn nắm được thông tin tốt hơn hoặc sửa chữa lỗi một cách dễ dàng.

0 nhận xét:

Đăng nhận xét

 
Top