Xử lý ngoại lệ

HD: ThS Nguyễn Hà Giang Khoa CNTT -Hutech

Nội dung

u Tình huống phát sinh ngoại lệ u Cách xử lý ngoại lệ làm việc trong C# u Câu lệnh try-catch-finally

Tình huống

u Những lỗiphátsinhkhirutimecóth

làm hư hạich ươngtrình

u Cóth ể khôngph ải lỗi lậptrình u VD: một số tìnhhu ốngvi ết dữ liệuvào

file v Đĩa bịđầ y v Lỗiph ần cứng v File bị thay đổithànhch ỉđọ c v Khôngth ể truy cập, truy vấnCSDL v …

Cách xử lý trước đây

GET A FILENAME OPEN THE FILE IF THERE IS NO ERROR OPENING THE FILE

READ SOME DATA IF THERE IS NO ERROR READING THE DATA

PROCESS THE DATA WRITE THE DATA IF THERE IS NO ERROR WRITING THE DATA

CLOSE THE FILE IF THERE IS NO ERROR CLOSING FILE

RETURN

u Hầu hếtcác b ướccókh ả năngth ất bại

u Khóxác địnhchínhxác l ỗi từ nhữngthông

tin trả về củahàmth ư viện

u Đoạncode ph ảith ựchi ện rồi mớibi ết lỗi!

Cách xử lý Exception

TRYTO DO THESE THINGS:

GET A FILENAME OPEN THE FILE READ SOME DATA PROCESS THE DATA WRITE THE DATA CLOSE THE FILE

RETURN IF ERROR OPENING THE FILE THEN ... IF ERROR READING THE DATA THEN ... IF ERROR WRITING THE DATA THEN ... IF ERROR CLOSING THE FILE THEN ...

u Đoạncode x ử lýng ắn gọn, dễđọ c

u Logic chươngtrình h ợplý h ơn, những đoạnnghi

u Cho phép xử lýtìnhhu ống lỗirõràngvà đơngi ản!

ngờ có lỗi nằmtrongvùngTry

Các đối tượng Exception

v CLR sẽ xác định lỗivàphátsinhta

u TrongC#, khiruntime error xu ấthi ện đối

tượngException

v Đối tượngException này đượcnémtr ở lại stack chờ cho mộtph ươngth ức bắt lỗi đó.

v NếuException nàykhông đượcch ương trình“catch” thìCRL s ẽ in rathông điệp lỗi

Mô hình gọi – xử lý Exception

CLR Runtime

The Main( ) method

Method Calls Travel Down

First Method

Exceptions Passed Up

Exception Thrown Here

Sử dụng try-catch

v Đặtcode cókh ả năng dẫn đếnngo ại lệ

u Dùngtry-catch để xử lýngo ại lệ

vàokh ối“try”

v Cung cấpcáckh ối“catch” theosau“try”

v Cóth ể cung cấp tất cả catch chocác l ỗi nếumu ốn xử lý, bằngcách s ử dụng các lớpexception thích h ợp

v Nếukhôngcung c ấp“catch” cho m ột ngoại lệ, thìexception này đượclan truyềnlêntrên.

Cúpháptry-catch

Code có khả năng dẫn đến lỗi

try {

RiskyBussiness();

Tham số exception được catch

} catch (SomeException e ) {

Đoạn xử lý với tình huống có lỗi

// Handle code

}

Khối try

v Từ khóatry

v Theo saukh ối“{…}”

v Khối“{…}” b ắtbu ộcph ảicó, khác v ới

u Bao gồmcácph ần

“{…}” trongif hay for

v Đặt bất cứ câu lệnhnàocókh ả năngphát

u Bêntrongkh ốitry

sinhrango ại lệ

Khối catch

u Đặt mộthay nhi ềungaysaukh ốitry v Khôngcó l ệnhnàochengi ữahaikh ối

catch của mộtkh ốitry

u Cúphápkh ốicatch nh ư sau

catch (Exception-class [var1]) {

// xử lý ngoại lệ 1

} catch (Exception-class [var2]) {

// xử lý ngoại lệ 2

}

Ví dụ try-catch

Chương trình bị terminate

Chương trình kết thúc bình thường

Sử dụng Finally

u Khi mộtexception đượcnémra

v Luồngth ựcthi s ẽ nhảyvàokh ốicatch x ử lýnó.

v Một số đoạncode gi ảiphóngtàinguyêncóth

ể bị

bỏ qua

v Khốitry-catch cóph ầnoption là finally

v Luônluôn được gọi

v Sử dụng để dọn dẹpcáctàinguyên đang nắm

Open File Read Data Close File // ngoại lệ được phát sinh // đoạn code này bị bỏ qua, dù file chưa đóng

giữ

VD có try-catch-finally

Luôn thực thi dù có hay không có ngoại lệ!

Lệnh throw

u Cho phépnémra m ộtngo ại lệ v Cúpháp: throw exception-object

Phát sinh ra ngoại lệ

Lớp Exception

v Ngoại lệ phátsinh b ởich ươngtrình

v Ngoại lệđượ c tạo bởiCLR

u Có2lo ạingo ại lệ

u LớpSystem.Exceptionlà l ớp cơ sở cho

tất cả lớptrongC#

u 2 lớp kế thừa từ lớpnày:

v ApplicationException:th ườnglàm l ớp cơ lệ phátsinh t ừ ứng

bảncho l ớpngo ại dụng

v SystemException:doCLRphátsinh

Lớp Exception (2)

Một số lớpException th ườngdùng v System.OutOfMemoryException v System.NullReferenceException v Syste.InvalidCastException v Syste.ArrayTypeMismatchException v System.IndexOutOfRangeException v System.ArithmeticException v System.DevideByZeroException v System.OverFlowException

Tự tạo lớp exception

VD truy xuất file

Tóm tắt

u Exceptionlàmchoch

ươngtrìnhch ặt chẽ hơn.Tránhterminatech ươngtrình độtng ộtvình ững lỗiruntime

u Tậpcác l ớpException

đa dạng,bao

hàmcác v ấn đề phátsinhlúcruntime

u LớpExceptionlà l ớp cơ sở chocác l ớp

xử lýngo ại lệ trong.NET

u Dễ dàng địnhngh ĩa lớpngo ại

lệ,và

phátsinhngo ại lệ trongch ươngtrình