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
{DangerousFunc1();
}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
Exception (E2), và đến lượt nó chứa một ngoại lệ kiểu DivideByZeroException
(E1) bên trong. Sau cùng ngoại lệ được phát sinh cho hàm TestFunc;
Khi khối catch của TestFunc thực hiện nó sẽ in ra thông điệp của ngoại lệ :
E3 – Custom Exception Situation!
sau đó từng ngoại lệ
bên trong sẽ được lấy ra thông qua vòng lặp while:
while ( inner != null)
{
Console.WriteLine(“{0}”, inner.Message);
inner = inner.InnerException;
}Kết quả là chuỗi các ngoại lệ được phát sinh và được bắt giữ:
Retrieving exception history...
E2 - Func2 caught divide by
zero E1 – DivideByZero
Exception
Câu hỏi và trả lời
Câuhỏi
3: Như câu trả lời bên trên tại sao tôi phải tìm hiểu nhiều về các ngoại lệ và cách
thức
xử lý các ngoại lệ khi chúng được phát sinh?
Trả lời 3: Việc xây dựng một chương trình ứng dụng là hết sức phức tạp, chương
trình luôn tiếm ẩn những yếu tố không ổn định và có thể phát sinh các ngoại lệ
dẫn đến những lỗi không mong muốn. Việc thực hiện bắt giữ các ngoại lệ là hết
sức cần thiết trong chương trình, nó cho phép chúng ta xây dựng được chương trình
hoàn thiện hơn và xử lý các thông điệp ngoại lệ t
ốt hơn. Tìm hiểu những ngoại lệ
đem đến cho chúng ta nhiều kinh nghiệm trong việc xây dựng các chương trình
phức tạp hơn.
Câu hỏi thêm
Câuhỏi 1: Hãy cho biết các từ khóa được sử dụng để xử lý ngoại lệ?