Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
1 MB
Nội dung
Click to edit Master subtitle CHƯƠNG 9: style XỬ LÝ NGOẠI LỆ Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM NỘI DUNG Khái niệm ngoại lệ (exception) Cơ chế hoạt động Exception handling Bắt exception (catching exception) Cấu trúc khối lệnh try – catch Cấu trúc khối lệnh có nhiều mệnh đề catch Ném ngoại lệ (Throwing exception) Từ khóa finally Tóm tắt KHÁI NIỆM NGOẠI LỆ (EXCEPTION) Khái niệm ngoại lệ (exception) Ngoại lệ (exception) đối tượng chứa thông tin lỗi (error condition) cố bất thường (unexpected behavior) thực thi chương trình Ngoại lệ xuất phát từ: Lỗi code lập trình Lỗi gây người dùng (người dùng nhập số thay phải nhập ký tự chữ cái,…) Lỗi từ hệ điều hành (hết tài nguyên nhớ, …) Khái niệm ngoại lệ (exception) Ví dụ: public int GetNumber(int min, int max) { int number=0; Người dùng nhập vào số nguyên ? while (number < || number>max) { Console.Write(“Enter a number between {0} and {1}: ”, min, max); string input = Console.ReadLine(); number = Convert.ToInt32(input); } } return number; Khái niệm ngoại lệ (exception) Ví dụ: public int GetNumber(int min, int max) { int number=0; Người dùng nhập vào ký tự: asdf ? while (number < || number>max) { Console.Write(“Enter a number between {0} and {1}: ”, min, max); string input = Console.ReadLine(); number = Convert.ToInt32(input); } } return number; Lỗi (exception) Xử lý lỗi nào? Khái niệm ngoại lệ (exception) Trình quản lý ngoại lệ (Exception handling): chế C# để bắt lỗi chương trình thực thi CƠ CHẾ HOẠT ĐỘNG CỦA EXCEPTION HANDLING Cơ chế hoạt động Exception handling Lỗi xuất Tạo đối tượng exception chứa thông tin lỗi Ném (throw) exception Ném đối tượng exception đến phương thức gọi nó, phần code sau khơng thực thi Bắt (catch) xử lý lỗi Phương thức biết cách xử lý bắt exception (catch) BẮT EXCEPTION (CATCHING EXCEPTION) Bắt exception (catching exception) Cấu trúc khối lệnh try – catch Cấu trúc khối lệnh có nhiều mệnh đề catch 18 Cấu trúc khối lệnh có nhiều mệnh đề catch Bắt nhiều exception khác try { string input = “a”; int number = Convert.ToInt32(input) } catch (FormatException e) { Console.WriteLine(“You must enter a number.”); } catch (OverflowException e) { Console.WriteLine(“Enter a smaller number.”); } catch (Exception e) { Console.WriteLine(“An unknown error occurred.”); } 19 Cấu trúc khối lệnh có nhiều mệnh đề catch Ghi chú: Khi khối lệnh catch thực thi, bỏ qua khối lệnh catch lại Thứ tự khối lệnh catch quan trọng • Các kiểu ngoại lệ cụ thể (các lớp dẫn xuất) phải xếp trước kiểu ngoại lệ tổng quát (lớp sở) Câu lệnh khối lệnh catch (Exception e) xếp trước catch (FormatException e) catch (OverflowException e) ? 20 NÉM NGOẠI LỆ (THROWING EXCEPTION) Ném ngoại lệ (Throwing exception) Để báo hiệu tình bất thường lớp C# ném ngoại lệ cách dùng từ khoá throw Cú pháp: throw [expression]; expression : đối tượng ngoại lệ dẫn xuất từ System.Exception 22 Ném ngoại lệ (Throwing exception) Ví dụ: public void Something() { throw new Exception(“thơng tin lỗi”); } 23 Ném ngoại lệ (Throwing exception) Giải thích Câu lệnh throw giống câu lệnh return, ném exception thay trả giá trị Hoạt động: • Tạo đối tượng exception (giống đối tượng khác) từ khóa new • Ném đối tượng 24 Ném ngoại lệ (Throwing exception) Ngồi ra, cịn có số lớp exception khác NotImplementedException IndexOutOfRangeException InvalidCastException FormatException NotSupportedException NullReferenceException StackOverflowException DivideByZeroException ArgumentNullException ArgumentOutOfRangeException … 25 Ném ngoại lệ (Throwing exception) Ví dụ public void TestFunction() { try { double a = 5; double b = 0; Console.WriteLine("{0} /{1} = {2}", a, b, Divide(a, b)); } catch (System.DivideByZeroException ex) { Console.WriteLine("Exception thrown: {0}", ex.Message); } catch (System.ArithmeticException) { Console.WriteLine("Bat ngoai le ArithmeticException"); } catch { Console.WriteLine("Bat ngoai le Unknown exception") } } public double Divide(double a, double b) { if (b == 0) throw new System.DivideByZeroException("Bat ngoai le DivideByZeroException"); if (a == 0) throw new System.ArithmeticException(); return a / b; } 26 Ném ngoại lệ (Throwing exception) Ngoài tự tạo lớp ngoại lệ riêng public class MyCustomException : Exception { public int SomeProperties { get; set; } } public MyCustomException(int someProperties) { SomeProperties = someProperties; } 27 TỪ KHÓA FINALLY Từ khóa finally Khi ném ngoại lệ, phần code cịn lại hàm không chạy Nếu muốn đoạn mã ln thực thi dùng từ khóa finally (khối lệnh finally chắn gọi cho dù có hay khơng có xảy biệt lệ) 29 Từ khóa finally try { int number = Convert.ToInt32(input) } catch (FormatException e) { Console.WriteLine(“You must enter a number.”); } finally { // Đoạn mã thực thi bất chấp điều xảy với try catch } 30 Ném ngoại lệ (Throwing exception) public void TestFunction() { try { double a = 5; double b = 0; Console.WriteLine("{0} /{1} = {2}", a, b, Divide(a, b)); } catch (System.DivideByZeroException ex) { Console.WriteLine("Exception thrown: {0}", ex.Message); } catch (System.ArithmeticException) { Console.WriteLine("Bat ngoai le ArithmeticException"); } catch { Console.WriteLine("Bat ngoai le Unknown exception") } finally { Console.WriteLine("Dong chuong trinh tai day"); } } public double Divide(double a, double b) { if (b == 0) throw new System.DivideByZeroException("Bat ngoai le DivideByZeroException"); if (a == 0) throw new System.ArithmeticException(); return a / b; } 31 TÓM TẮT Exception chế xử lý lỗi C# Khi phát lỗi, Exception đóng gói thơng tin lỗi ném ngồi method khác bắt xử lý lỗi Nếu biết khối lệnh chương trình có khả sinh lỗi, bao bọc khối lệnh try-catch 32