Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Quản lý ngoại lệ trong lập trình Java

  1. #1
    Ngày gia nhập
    05 2011
    Nơi ở
    hell
    Bài viết
    37

    Mặc định Quản lý ngoại lệ trong lập trình Java

    Tranh thủ lúc chán chán ngồi viết cái này rồi post lên. Không biết có ai dùng được ko
    <ps: Mất gần 2 tiếng viết rồi máy đơ. hix mất hết h phải viết lại hic>

    Phần I: Ngoại Lệ có Sẵn

    Các bạn có thể theo dõi ví dụ sau để dễ mường tượng về ngoại lệ hơn. Sau đó mình sẽ định nghĩa nó

    Java Code:
    1. import java.util.Scanner;
    2. public class DemoException
    3. {
    4.     public static void main (String args [])
    5.     {
    6.         int tuso, mauso, ketqua;
    7.         System.out.println ("Chuong trinh tinh phan so: ");
    8.         Scanner input = new Scanner (System.in);
    9.         System.out.print ("Tu so: ");
    10.         tuso = input.nextInt ();
    11.         System.out.print ("Mau so: ");
    12.         mauso = input.nextInt ();
    13.         System.out.print ("Ket Qua: " + tuso/mauso);
    14.     }
    15. }
    ///

    Nếu không để ý thì bạn ko phát hiện ra. Chúng ta vẫn dịch và chạy chương trình một cách bình thường. Nhưng nếu nhập mẫu số = 0 thì sao nhỉ . Giống như kiểu đi đêm lắm có ngày gặp ma ý . Bình thường thì ko gặp nhưng đi lắm thì gặp. Chương trình trên mình demo dễ nhận thấy 0 gây ra lỗi nhưng có nhiều chương trình mà ta ko phát hiện được. Như thế test nhiều mới phát hiện được lỗi






    I> Ngoại lệ là gì ?

    - Đã theo dõi ví dụ xong, vậy ngoại lệ là gì vậy ? .... Ngoại lệ là lỗi xảy ra trong quá trình thực thi chương trình
    - Nếu không xử lý thì làm sao, ntn ? ..... Đương nhiên nếu không được xử lý thì ngoại lệ sẽ làm cho máy treo hay dừng đột ngột. Hix. Vậy mà cũng hỏi =.="
    - Có mấy loại ngoại lê ?????? //// ?????: Có nhiều cách phân chia ngoại lệ ra để định nghĩa. Ở đây mình chọn cách "cách biểu hiện trong quá trình dịch hay chạy ?" Người ta còn gọi: Cheched exception và UnCheched exception
    ------> Loại Checked là loại mà máy ảo java phát hiện ngay trong quá trình dịch. Cái loại mặt mĩ thế kia thả ra thế nào cũng gây tội ---> xử lý mau lẹ. Thả ra lại làm khổ mình, khổ người
    Loại UnChecked: Thả cho ra khỏi tù. Loại này có thể cải tạo đc (ví dụ ở trên thuộc loại này): Hoàn toàn bình thường nếu như lỗi khác 0.

    II> Exception class

    Trong Java mỗi loại ngoại lệ được thể hiện trong một lớp. Có một Siêu lớp Exception là lớp cha cho tất cả các lớp thể hiện ngoại lệ. Một số bạn nói tới một số lớp khác hay lớp cha của exception... Xin thưa từ exception trở xuống mới gọi là exception

    Cú pháp: Cơ bản thì có 2 khối chính là try và catch ngoài ra còn có khối finally
    - try: Nằm trong try là các đối tượng tình nghi. Bọn này có khả năng cao phạm tội đây mà. Bắt nó vào trong try để khảo, tấn . Lúc nào khai ra mới ... chưa thôi ---> chuyển tới khối catch
    - catch: Xử lý cắt chân cắt tay hay vân vân thì tùy =))
    phương thức hay sử dụng chú ý: printStackTrace ()---> Kiểu như in ra theo thứ tự phạm lỗi ấy mà. Từ đó có biện pháp xử lý
    - finally: Khối bắt buộc thực thi, cho dù có lỗi hay ko có lỗi. Thường là dọn dẹp bộ nhớ hoặc là đóng các stream

    Bạn có thể theo dõi forms sau:




    Mình xin chú ý 2 điều sau:
    - Các cụ ta vẫn còn tư tưởng trọng nam khinh nữ : do đó mà try chỉ có 1 còn mình nó được lấy 5, 6 vợ .... (tức là catch bao nhiêu tùy ý )
    - Nếu excepiton a là cha của exception b thì khối catch chưa b phải nằm trên khối catch chưa excetpion a. Đơn giản vì nếu ngược lại thì thằng b chả bao giờ được dùng tới cả


    III> Phát sinh ngoại lệ

    Ngoại lệ sẽ được máy ảo bắt và ném ra (ném linh tinh lắm các bạn đừng quan tâm kẻo ném trúng mình ). Java cho phép ném bằng từ khóa throw Chú ý là throw nhé. đừng nhầm sang throws. Vì sắp tới đây sẽ đề cập tới cả throws
    Bạn có thể theo dõi ví dụ sau. (dịch và chạy như ví dụ đầu tiên)

    Java Code:
    1. import java.util.Scanner;
    2. public class DemoException
    3. {
    4.     public static void ps (int a, int b) throws RuntimeException
    5.     {
    6.         if (b == 0)
    7.             throw new RuntimeException ();
    8.         else
    9.             System.out.print ("Ket Qua: " + a/b);
    10.     }
    11.     public static void main (String args [])
    12.     {
    13.         int tuso, mauso, ketqua;
    14.         System.out.println ("Chuong trinh tinh phan so: ");
    15.         Scanner input = new Scanner (System.in);
    16.         System.out.print ("Tu so: ");
    17.         tuso = input.nextInt ();
    18.         System.out.print ("Mau so: ");
    19.         mauso = input.nextInt ();
    20.         ps (tuso, mauso);
    21.     }
    22. }


    Giải thích:
    - throw: Dùng để ném các ngoại lệ
    - throws: Dùng để thông báo rằng "cái method này chứa chấp mấy thằng phạm tội , bất cứ lúc nào cũng có thể bắt"

    Note: Chú ý. Một phương thức gọi một phương thức chứa ngoại lệ thì bản thân nó phải có từ khóa throws.

    IV> Các phương thức chính của Exception
    - Exception ()
    - Exception (String msg)

    2 cái trên chắc mình ko cần phải giải thích nhỉ

    - String getMessage () : Lấy câu thông báo của Exception
    - void printStackTrace (): In ra stack lan truyền của Exception
    - Một vài cái nữa mình định nói nhưng thôi vì cũng chả mấy khi dùng


    Phần II: Ngoại lệ tự định nghĩa

    Ngoài việc dùng lớp đối tượng có sẵn trong Java. Ta có thể tự tạo cho mình các lớp ngoại lệ bằng cách kế từa Exception hoặc lớp dẫn xuất của nó ... Sau đó thì cài đặt thôi. hehe

    Demo cái cho nó trực quan

    Java Code:
    1. public class ExDM extends Exception
    2. {
    3.     public ExDM ()
    4.     {
    5.         super ("Nham roi em ah. Phai lon hon 0");
    6.     }
    7.     public ExDM (String msg)
    8.     {
    9.         super (msg);
    10.     }
    11. }

    Hehe. Có vẻ chả có method nào nhỉ. Cái này thì vất vả ở khâu xây dựng test
    Java Code:
    1. import java.util.Scanner;
    2.  
    3. public class Test
    4. {
    5.     public static void nhap () throws ExDM
    6.     {
    7.         Scanner input = new Scanner (System.in);
    8.         System.out.print ("Nhap so nguoi: ");
    9.         int a = input.nextInt ();
    10.         if (a <= 0)
    11.             throw new ExDM ();
    12.     }
    13.    
    14.     public static void main (String args [])
    15.     {
    16.        
    17.         try
    18.         {
    19.             nhap ();
    20.         }
    21.         catch (ExDM e)
    22.         {
    23.             System.out.println (e.getMessage ());
    24.         }
    25.     }
    26. }

    Note: Một chú ý: Khi ta overriding. Nếu lớp cha ném ra ngoại lệ X thì lớp con cũng phải ném ra ngoại lệ X hoặc ném ra ngoại lệ x (với x là con của X hehehe)
    Phía trên mình xây dựng một class nhập phải lớn hơn 0. Tuy nhiên mình ko để hàm nhập trong class exception ExDM. Bạn nào muốn có thể cho vào đấy
    Attached Thumbnails Attached Thumbnails 1.jpg   2.jpg   3.jpg  
    Đã được chỉnh sửa lần cuối bởi Mr_Chan : 15-03-2012 lúc 12:05 PM. Lý do: edit

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Được đấy
    Trước giờ mình ko thích xài try catch ( vì ko quen, C/C++ éo cóa) mà thay vào đó là tự if else.
    Giờ đọc dc cái xử lý tội phạm thì cũng ngon. Mình theo mọi người cũng "bày đặt" try catch cho bằng người ta ^^

    Cho mình hỏi phát: Là mấy cái Exception tham số của mấy cái catch là nó mọc ở đâu ra ? Làm sao để biết exception nào tương ứng với loại lỗi nào để mình có cách xử lý thích hợp ?
    Làm sao biết thằng tội phạm 1 nó phạm tội gì để phạt nó ? Làm sao biết thằng tội phạm 2 phạm tội gì để xử phạt nó ?
    Ở cái demo try catch code trên thì chỉ mới thấy câu In ra màn hình chứ ko thấy "gom các thằng tội phạm vào" rồi đánh số chúng (như việc mỗi thằng cầm 1 cái bảng -mã tù nhân) rồi công an chụp cái ảnh ấy ^^
    Đã được chỉnh sửa lần cuối bởi clchicken : 14-03-2012 lúc 10:31 PM.
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    05 2011
    Nơi ở
    hell
    Bài viết
    37

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Được đấy
    Trước giờ mình ko thích xài try catch ( vì ko quen, C/C++ éo cóa) mà thay vào đó là tự if else.
    Giờ đọc dc cái xử lý tội phạm thì cũng ngon. Mình theo mọi người cũng "bày đặt" try catch cho bằng người ta ^^

    Cho mình hỏi phát: Là mấy cái Exception tham số của mấy cái catch là nó mọc ở đâu ra ? Làm sao để biết exception nào tương ứng với loại lỗi nào để mình có cách xử lý thích hợp ?
    Làm sao biết thằng tội phạm 1 nó phạm tội gì để phạt nó ? Làm sao biết thằng tội phạm 2 phạm tội gì để xử phạt nó ?
    Ở cái demo try catch code trên thì chỉ mới thấy câu In ra màn hình chứ ko thấy "gom các thằng tội phạm vào" rồi đánh số chúng (như việc mỗi thằng cầm 1 cái bảng -mã tù nhân) rồi công an chụp cái ảnh ấy ^^
    Thực ra thì trong C++ cũng có try và catch tuy nhiên nhiều sách ko đề cập tới

    try, catch trong C++
    Làm sao biết thằng tội phạm 1 nó phạm tội gì để phạt nó ? Làm sao biết thằng tội phạm 2 phạm tội gì để xử phạt nó ?
    Khi xây dựng các lớp exception thì người ta đã phân ra các loại tội phạm. Trong khối try nếu phát hiện tội phạm nào thì xử lý bằng khối catch
    ---> Ở trên mình dùng biện pháp in ra màn hình để thông báo. Chứ không thể sửa 0 thành 1 được ---> Người dùng nhập sai có thể yêu cầu nhập lại. Hoặc gần đây nhất mình có làm mô hình sinh thái ---> các entity va chạm với nhau ---> Mình chưa nghĩ ra biện pháp ----> Làm ngơ. Tức là bắt lỗi và bỏ qua lỗi đó

    - Còn phần tự xây dựng các lớp exception mình chưa viết nốt

  4. #4
    Ngày gia nhập
    03 2009
    Nơi ở
    Ở địa ngục
    Bài viết
    667

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Được đấy
    Trước giờ mình ko thích xài try catch ( vì ko quen, C/C++ éo cóa) mà thay vào đó là tự if else.
    Giờ đọc dc cái xử lý tội phạm thì cũng ngon. Mình theo mọi người cũng "bày đặt" try catch cho bằng người ta ^^

    Cho mình hỏi phát: Là mấy cái Exception tham số của mấy cái catch là nó mọc ở đâu ra ? Làm sao để biết exception nào tương ứng với loại lỗi nào để mình có cách xử lý thích hợp ?
    Làm sao biết thằng tội phạm 1 nó phạm tội gì để phạt nó ? Làm sao biết thằng tội phạm 2 phạm tội gì để xử phạt nó ?
    Ở cái demo try catch code trên thì chỉ mới thấy câu In ra màn hình chứ ko thấy "gom các thằng tội phạm vào" rồi đánh số chúng (như việc mỗi thằng cầm 1 cái bảng -mã tù nhân) rồi công an chụp cái ảnh ấy ^^
    Hi, nó sẽ nhảy đến catch bắt Exception nào đó, tuỳ theo loại Exception được ném ra, ở trên bài của của cậu chủ topic mới chỉ nói về một loại Exception chung nhất, có nhiều loại Exception, được kế thừa từ lớp Exception.

    C++ có try catch rồi nha clchicken

  5. #5
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Ôi thế ah :(. Thế mà bữa h cứ tưởng nó ko có (vì thấy mấy người Java với C# mới hay xài nên...), đúng là nông cạn thật.
    Mà mình vẫn chưa hiểu Mấy loại Exception lắm. (tự dưng thấy nó mọc ra, lạ lạ )
    Mấy Exception đó đã được ngôn ngữ xây dựng sẵn và mình chỉ việc lôi ra đối chiếu thôi hoặc là mình override thêm vào lớp nữa đúng không nhỉ ?
    Mình có đọc ở đâu đó ở 1 hướng tiếp cận khác là việc throw Exception trong 1 hàm/phương thức nào đấy. Nếu trong quá trình thực hiện phương thức mà bị lỗi thì throw exception đó ra.
    Vậy có phải cái exception mình đã viết trong hàm đó bây giờ nó được bắn ra ngoài này để catch bắt không ?
    Um Mani Padme Hum...!!

  6. #6
    Ngày gia nhập
    05 2011
    Nơi ở
    hell
    Bài viết
    37

    Mặc định Quản lý ngoại lệ trong lập trình Java

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    Ôi thế ah :(. Thế mà bữa h cứ tưởng nó ko có (vì thấy mấy người Java với C# mới hay xài nên...), đúng là nông cạn thật.
    Mà mình vẫn chưa hiểu Mấy loại Exception lắm. (tự dưng thấy nó mọc ra, lạ lạ )
    Mấy Exception đó đã được ngôn ngữ xây dựng sẵn và mình chỉ việc lôi ra đối chiếu thôi hoặc là mình override thêm vào lớp nữa đúng không nhỉ ?
    Tại mấy lỗi trên chưa nghiêm trọng thôi. Chứ dùng nhiều là quen ngay, thích ngay ý mà
    Exception là ông tổ của các loại lỗi mà. Trong Exception có 2 lớp con chính: RuntimeException, IOException. Trong Runtime lại có NullPointer .... . Ngoài ông tổ đó ra còn có cụ tổ Throwable . Nhưng mà rộng quá. Quản lý cả error nữa

    Vậy có phải cái exception mình đã viết trong hàm đó bây giờ nó được bắn ra ngoài này để catch bắt không ?
    Java cũng cung cấp các key word để mình tự xây dựng cho riêng mình nữa mà . Mình sẽ post tiếp vào ngày gần đây nhất

  7. #7
    Ngày gia nhập
    10 2011
    Bài viết
    552

    Hê, đã mườn tượng được cái try catch nó làm trò gì rồi
    Hy vọng bài mới sớm ra lò để mình không còn "mườn tượng" nữa. Mà còn có cái áp dụng với người ta chứ. Bữa h toàn tự bắt lỗi = tay thôi :(
    Um Mani Padme Hum...!!

  8. #8
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    cái demo này có vấn đề đó bạn , xem lại nhé

  9. #9
    Ngày gia nhập
    05 2011
    Nơi ở
    hell
    Bài viết
    37

    Em ko phát hiện lỗi sai, mong a chỉ giúp. Cơ bản là mù mờ + lâu không đụng tới nên ko phát hiện
    Chỉ muốn góp sức mọn vào forum mới mở
    Thanks

    beautifulsoul84hung,

  10. #10
    Ngày gia nhập
    03 2009
    Nơi ở
    %appdata%\Temp
    Bài viết
    819

    Trích dẫn Nguyên bản được gửi bởi Mr_Chan Xem bài viết
    Em ko phát hiện lỗi sai, mong a chỉ giúp. Cơ bản là mù mờ + lâu không đụng tới nên ko phát hiện
    Chỉ muốn góp sức mọn vào forum mới mở
    Thanks

    beautifulsoul84hung,
    Giữa 2 cái catch sao lại có .... ( có code) thế kia
    Edit: Ah, giờ mới hiểu, đó là những cái catch khác.
    Cơ mà type của các exception trong mỗi mệnh đề catch phải khác nhau, giống nhau thì thằng phía trên nó catch rồi làm sao throw cho thằng dưới catch được
    Đã được chỉnh sửa lần cuối bởi Wazi Armstrong : 15-03-2012 lúc 01:37 AM.
    .::[The best way to predict the future is to invent it]::.
    __________________________________________________ _ - Alan Kay -

Các đề tài tương tự

  1. Cách quản lý tối ưu các kết nối tcp socket trong Java?
    Gửi bởi htn trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 6
    Bài viết cuối: 30-07-2016, 07:29 AM
  2. Lập trình socket trong Java, 1 server kết nối nhiều client trong Java như thế nào?
    Gửi bởi detective009 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 12
    Bài viết cuối: 27-10-2013, 12:53 AM
  3. Đọc Ghi file trong java, báo lỗi java.io.NotSerializableException: java.util.Scanner
    Gửi bởi quyenktpm2 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 3
    Bài viết cuối: 13-08-2013, 11:40 AM
  4. Xử lý nút Xóa trong phần mềm quản lí Xe Khách với dữ liệu có khóa ngoại?
    Gửi bởi thanh_cute trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 9
    Bài viết cuối: 03-09-2011, 09:30 AM
  5. Quản lý thiết bị ngoại vi trong Win server 2008..??
    Gửi bởi nguyenthanh2687 trong diễn đàn Thắc mắc chung
    Trả lời: 4
    Bài viết cuối: 15-07-2010, 09:25 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn