Try.. catch - Phần 1


Diễn đàn chia sẻ kiến thức, kinh nghiệm về IT và cuộc sống!
 
Trang ChínhGalleryTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập
Top posters
Sakura (1124)
 
hotboy (705)
 
Già Làng (373)
 
con_ca_nho90 (289)
 
that_true (154)
 
theanhkkt (143)
 
phamay (137)
 
lovelonelyman (134)
 
o0ovioletstaro0o (128)
 
stevenhung (122)
 
Âm - Dương lịch
Clock
Logo
11TH02 Pro!
Liên kết
Tin tức 60s
Tin công nghệ
Thời sự 24h
Game Moblie

Share | 
 

 Try.. catch - Phần 1

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Sakura


avatar

Thú CƯng :
Nam Scorpio

Số bài viết : 1124
Điểm : 1688
Được cảm ơn : 35
Ngày sinh : 03/11/1990
Tham gia ngày : 16/03/2010
Tuổi : 27
Đến từ : Bình Dương
Ngề nghiệp : IT Student

Bài gửiTiêu đề: Try.. catch - Phần 1   13/10/2010, 10:39

XỬ LÝ NGOẠI LỆ TRONG C#

Ngoại lệ là gì? Là những tình huống xảy ra mà sẽ làm cho chương trình của chúng ta bị văng lúc run-time.
Ví dụ: giả sử, đâu đó trong chương trình, chúng ta có 1 phép chia cho 0 --> Văng, hoặc là nhập 1 số nguyên, mà ta lại chơi 1 chữ a --> Văng….
Các bạn hãy xem đoạn code này:
Code:
class Test
{
    static void Main()
    {
        int a;
        a = int.Parse(System.Console.ReadLine());
        System.Console.WriteLine("a = " + a);
        System.Console.ReadLine();
    }
}

Nếu chúng ta nhập vào 1 số --> bình thường.
Nếu chúng ta nhập vào 1 hoặc vài ký tự linh tinh, chúng ta sẽ có thông báo sau:
Code:
Input string was not in a correct format.
Nghĩa là IDE đã phát hiện và ném ra 1 ngoại lệ kiểu Format --> Văng
Vậy làm sao để cho chương trình của chúng ta không văng?
Chúng ta phải bắt lấy nó, xử lý, và nói là IDE bỏ qua cho.
Bằng cách: sử dụng try … catch
Cách sử dụng: các bạn xem đoạn chương trình sau, xem tôi kiểm soát lỗi này thế nào?
Code:
using System;

class Test
{
    static void Main()
    {
        int a;
        try
        {
            a = int.Parse(Console.ReadLine());
            Console.WriteLine("a = " + a);
        }
        catch (FormatException e)
        {
            Console.WriteLine("Loi: " + e.Message);
        }
        System.Console.ReadLine();
    }
}

Đoạn chương trình trên, tôi đã sử dụng 2 khối: try và catch.
Khối try: là khối những công việc mà ta muốn làm, mà lại nghi ngờ có xảy ra ngoại lệ trong đó.
Khối catch: là khối mà ta sẽ xử lý nếu có ngoại lệ xảy ra.
Trong đoạn chương trình trên, nếu bạn nhập 1 số, thì khối try sẽ làm hết, khối catch không làm gì hết. Nhưng nếu bạn nhập 1 chữ chẳng hạn, thì khối catch sẽ vào cuộc.
Để ý dòng này:
Code:
FormatException e
Nghĩa là ta đang đón bắt cái lỗi Format.
Nếu chúng ta không biết trước được lỗi gì sẽ xảy ra, ta nên dùng : Exception e
Với chú này, thì anh ngoại lệ nào cũng ko thể thoát được. Hehe!
Thêm 1 vấn đề, nếu trong khối try, ta có nhiều trường hợp gây lỗi? Ví dụ vừa chia cho 0, vừa nhập số cho kiểu int, hay tràn chỉ số.
Cách giải quyết, ta chỉ cần khai báo nhiều khối catch để túm chúng thôi.
Hãy xem đoạn này:
Code:
using System;

class Test
{
    static void Main()
    {
        int a;
        try
        {
            Console.WriteLine("Nhap a: ");
            a = int.Parse(Console.ReadLine());
            Console.WriteLine("a = " + a);
            int c = 12 / a;
            Console.WriteLine("c = " + c);
        }
        catch (FormatException e)
        {
            Console.WriteLine("Loi: " + e.Message);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Loi: " + e.Message);
        }
        System.Console.ReadLine();
    }
}

Trong đoạn này, có đến 2 trường hợp có thể gây lỗi, nếu ta nhập chữ, thì y trường hợp ở trên, nếu ta nhập 0, ta có ngoại lệ chia cho 0, và tôi đã dùng anh DivideByZeroException để bắt.
Vậy là tạm ổn với 2 khối try.. catch
Giờ tiếp theo là đến khối finnaly:
Nhiệm vụ: thực hiện các việc còn lại, cho dù có hay không có ngoại lệ, thì khối này vẫn làm việc. chúng ta không thể sử dụng các từ khóa điều khiển trong đây, ví dụ: break, return.
Hãy xem ví dụ để xem khối này làm việc ra sao.
Code:
using System;

class Test
{
    static void Main()
    {
        int a;
        try
        {
            Console.WriteLine("Nhap a: ");
            a = int.Parse(Console.ReadLine());
            Console.WriteLine("a = " + a);
            int c = 12 / a;
            Console.WriteLine("c = " + c);
        }
        catch (FormatException e)
        {
            Console.WriteLine("Loi: " + e.Message);
        }
        catch (DivideByZeroException e)
        {
            Console.WriteLine("Loi: " + e.Message);
        }
        finally
        {
            Console.WriteLine("Ket Thuc!");
        }
        System.Console.ReadLine();
    }
}

Ta có thêm khối, finnaly, nó sẽ làm nhiệm vụ xuất ra cái câu Ket Thuc!, và luôn luôn như vậy.
Việc sử dụng khối này, thì phải tùy vào từng trường hợp thôi.
Hôm nay đến đây thôi, rảnh làm tiếp phần throw.
Ai có thắc mắc hoặc ý kiến hay thì xin commnent tại đây!
Cám ơn!

_________________________________________________
Khách viếng thăm muốn liên hệ với mình thì xem thông tin phía dưới nha:
Email: [You must be registered and logged in to see this link.]
Nick Yahoo: Edward_Thien
Về Đầu Trang Go down
Xem lý lịch thành viên
hotboy


avatar

Thú CƯng :
Nam Aries

Số bài viết : 705
Điểm : 1043
Được cảm ơn : 9
Ngày sinh : 21/03/1990
Tham gia ngày : 13/05/2010
Tuổi : 28
Đến từ : BDU

Bài gửiTiêu đề: Re: Try.. catch - Phần 1   13/10/2010, 13:03

hay đấy cố gắng phát huy cho anh em được nhờ
Về Đầu Trang Go down
Xem lý lịch thành viên
con_ca_nho90

Member Nhiệt Tình


Member Nhiệt Tình
avatar

Thú CƯng :
Nam Aquarius

Số bài viết : 289
Điểm : 329
Được cảm ơn : 4
Ngày sinh : 17/02/1990
Tham gia ngày : 05/05/2010
Tuổi : 28
Đến từ : Nhà hàng xóm
Ngề nghiệp : click chuột định giang sơn :D
Chăm ngôn : Giang hồ hiểm ác không bằng mạng lag thất thường

Bài gửiTiêu đề: Re: Try.. catch - Phần 1   14/10/2010, 06:31

thanks
Về Đầu Trang Go down
Xem lý lịch thành viên https://plus.google.com/u/0/?hl=vi jeennguyen@ymail.com
.net




Nữ Capricorn

Số bài viết : 14
Điểm : 12
Được cảm ơn : 0
Ngày sinh : 11/01/1989
Tham gia ngày : 11/10/2010
Tuổi : 29
Đến từ : sần

Bài gửiTiêu đề: Re: Try.. catch - Phần 1   14/10/2010, 11:01

hiểu không ??thôi mien
Về Đầu Trang Go down
Xem lý lịch thành viên
Sponsored content




Bài gửiTiêu đề: Re: Try.. catch - Phần 1   

Về Đầu Trang Go down
 

Try.. catch - Phần 1

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
IT World! :: HỌC TẬP :: HỌC KỲ V :: Nhập môn .Net-