tailieunhanh - Xử lí ngoại lệ phần cuối

Để hiểu rõ hơn ta có thể dùng trình debugger để chạy từng bước chương trình khi đó ta sẽ hiểu rõ từng bước thực thi cũng như việc phát sinh các ngoại lệ. | Kết quả E3 - Custom Exception Situation Retrieving exception history. E2 - Func2 caught divide by zero E1 - DivideByZeroException Để hiểu rõ hơn ta có thể dùng trình debugger để chạy từng bước chương trình khi đó ta sẽ hiểu rõ từng bước thực thi cũng như việc phát sinh các ngoại lệ. Chương trình bắt đầu với việc gọi hàm DangerousFunc1 trong khối try try DangerousFunc 1 DangerousFunc1 gọi DangerousFunc2 DangerousFunc2 lại gọi DangerousFunc3 và cuối cùng DangerousFunc3 gọi DangerousFunc4 . Tất cả việc gọi này điều nằm trong khối try. Cuối cùng DangerousFunc4 phát sinh ra ngoại lệ DivideByzeroException. Ngoại lệ này bình thường có chứa thông điệp bên trong nó nhưng ở đây chúng ta tự do dùng thông điệp mới. Để dễ theo dõi chúng ta đưa vào các chuỗi xác nhận tuần tự các sự kiện diễn ra. Ngoại lệ được phát sinh trong DangerousFunc4 và nó được bắt trong khối catch trong hàm DangerousFunc3 . Khối catch trong DangerousFunc3 sẽ bắt các ngoại lệ Arithmetic- Exception như là DivideByZeroException nó không thực hiện hành động nào mà chỉ đơn giản là phát sinh lại ngoại lệ catch throw Cú pháp để thực hiện phát sinh lại cùng một ngoại lệ mà không có bất cứ bổ sung hay hiệu chỉnh nào là throw. Do vậy ngoại lệ được phát sinh cho DangerousFunc2 khối catch trong DangerousFunc2 thực hiện một vài hành động và tiếp tục phát sinh một ngoại lệ có kiểu mới. Trong hàm khởi dựng của ngoại lệ mới DangerousFunc2 truyền một chuỗi thông điệp mới E2 - Func2 caught divide by zero và ngoại lệ ban đầu. Do vậy ngoại lệ ban đầu E1 trở thành ngoại lệ bên trong của ngoại lệ mới E2 . Sau đó hàm DangerousFunc2 phát sinh ngoại lệ này E2 cho hàm DangerousFunc1 . DangerousFunc1 bắt giữ ngoại lệ này làm một số công việc và tạo ra một ngoại lệ mới có kiểu là MyCustomException truyền vào hàm khởi dựng của ngoại lệ mới một chuỗi mới E3 - Custom Exception Situation và ngoại lệ được bắt giữ E2 . Chúng ta nên nhớ rằng ngoại lệ được bắt giữ là ngoại lệ có chứa ngoại lệ DivideByZeroException