Xử lý ngoại lệ trong Java

Ngày đăng: 25/07/2024   -    Cập nhật: 01/08/2024

Java là một trong những ngôn ngữ lập trình phổ biến nhất hiện nay với độ phổ biến và ứng dụng rộng rãi trong các lĩnh vực khác nhau. Tuy nhiên, trong quá trình học và sử dụng Java, chúng ta không thể tránh khỏi việc gặp phải các lỗi hoặc ngoại lệ (exceptions).

Xác định ngoại lệ trong Java

Trước khi đi vào cách xử lý ngoại lệ, chúng ta cần hiểu rõ về khái niệm ngoại lệ trong Java là gì. Ngoại lệ (exception) là một tình huống bất thường xảy ra trong quá trình thực thi chương trình. Điều này có thể do nhiều nguyên nhân như: nhập sai dữ liệu, kết nối mạng bị gián đoạn, lỗi logic trong chương trình,...


Trong Java, ngoại lệ được biểu diễn dưới dạng các đối tượng của các lớp con của lớp Exception. Các đối tượng này bao gồm thông tin về ngoại lệ xảy ra và cách xử lý ngoại lệ đó. Khi một ngoại lệ xảy ra, chương trình sẽ tự động tạo ra một đối tượng ngoại lệ và chúng ta có thể sử dụng các cơ chế xử lý ngoại lệ để giải quyết vấn đề này.

Xử lý ngoại lệ sử dụng try-catch

Cách đơn giản nhất để xử lý ngoại lệ trong Java là sử dụng khối try-catch. Khối try-catch được sử dụng để bao quanh các đoạn mã có thể sinh ra ngoại lệ. Cấu trúc của khối try-catch:


try {

    // đoạn mã có thể sinh ra ngoại lệ

} catch (Exception e) {

    // xử lý ngoại lệ

}

Trong đó, try là khối mã có thể sinh ra ngoại lệ và catch là khối mã xử lý ngoại lệ. Nếu một ngoại lệ xảy ra trong khối try, chương trình sẽ tự động bắt ngoại lệ đó và thực hiện khối catch để xử lý.


Ví dụ, chúng ta có một phương thức tính tổng của hai số nguyên và muốn xử lý ngoại lệ khi người dùng nhập sai kiểu dữ liệu:


public static int tinhTong(int a, int b) {

    try {

        return a + b;

    } catch (Exception e) {

        System.out.println("Dữ liệu nhập vào không hợp lệ!");

    }

}

Trong trường hợp này, nếu người dùng nhập vào một chuỗi thay vì số, chương trình sẽ xử lý ngoại lệ bằng cách in ra thông báo "Dữ liệu nhập vào không hợp lệ!" thay vì crash.

Sử dụng finally trong xử lý ngoại lệ

Một trong những thứ cần lưu ý khi sử dụng khối try-catch là việc sử dụng khối finally. Khối finally được sử dụng để thực hiện các hành động cuối cùng bất kể có xảy ra ngoại lệ hay không. Ví dụ:


try {

    // đoạn mã có thể sinh ra ngoại lệ

} catch (Exception e) {

    // xử lý ngoại lệ

} finally {

    // thực hiện các hành động cuối cùng

}

Trong trường hợp này, các hành động trong khối finally sẽ được thực hiện sau khi thực hiện xong cả khối try và catch, bất kể có ngoại lệ xảy ra hay không. Điều này giúp đảm bảo rằng các tài nguyên đã được giải phóng và các hành động cuối cùng được thực hiện đúng cách.

Throw ngoại lệ trong Java

Bên cạnh việc xử lý các ngoại lệ tự động, chúng ta cũng có thể tự tạo ra các ngoại lệ bằng cách sử dụng từ khóa throw. Từ khóa throw được sử dụng để ném một đối tượng ngoại lệ vào khối try-catch. Cấu trúc của cách xử lý ngoại lệ này như sau:


try {

    // đoạn mã có thể sinh ra ngoại lệ

} catch (Exception e) {

    throw new Exception("Thông báo lỗi");

}

Trong ví dụ này, khi chương trình gặp phải ngoại lệ, nó sẽ ném một đối tượng ngoại lệ mới với thông báo "Thông báo lỗi" vào khối catch để xử lý.


Một điểm quan trọng cần lưu ý là chúng ta có thể ném các đối tượng ngoại lệ của bất kỳ lớp con nào của lớp Exception. Vì vậy, chúng ta có thể tùy chỉnh thông tin ngoại lệ và cách xử lý nó theo nhu cầu của mình.

Xử lý ngoại lệ chưa xác định (Unchecked Exceptions)

Trong Java, có hai loại ngoại lệ chính: unchecked và checked. Unchecked exceptions là các ngoại lệ xảy ra trong khi chương trình đang thực thi và không được kiểm tra trước đó. Điều này có nghĩa là chúng ta không cần phải viết mã để xử lý những loại ngoại lệ này, và chương trình sẽ crash nếu gặp phải ngoại lệ này.


Một số ví dụ về unchecked exceptions là NullPointerException, ArrayIndexOutOfBoundsException, NumberFormatException,... Các ngoại lệ này thường do lỗi logic trong chương trình hoặc nhập sai dữ liệu từ người dùng.


Vì unchecked exceptions không được kiểm tra trước đó, nên chúng ta có thể sử dụng khối try-catch để xử lý những ngoại lệ này, nhưng đây không phải là cách xử lý tối ưu vì chúng ta không nên cho phép các ngoại lệ này xảy ra trong quá trình thực thi chương trình.

Xử lý ngoại lệ đã xác định (Checked Exceptions)

Checked exceptions là các ngoại lệ được kiểm tra trước đó và phải được xử lý bằng cách sử dụng khối try-catch hoặc khai báo trước khi thực thi chương trình. Điều này giúp đảm bảo rằng các ngoại lệ này sẽ được xử lý và không gây crash cho chương trình.


Một số ví dụ về checked exceptions là IOException, SQLException, FileNotFoundException, v.v. Các ngoại lệ này thường do các tình huống bất thường xảy ra trong quá trình thực thi chương trình như mất kết nối mạng, không tìm thấy tập tin, v.v.


Để xử lý các checked exceptions, chúng ta có thể sử dụng khối try-catch và/hoặc khai báo ngoại lệ trước khi thực thi chương trình. Ví dụ:


public static void docFile() throws IOException {

    File file = new File("file.txt");

    FileReader fr = new FileReader(file);

    BufferedReader br = new BufferedReader(fr);

}

Trong ví dụ này, chúng ta đã khai báo trước rằng phương thức docFile() có thể sinh ra ngoại lệ IOException và chúng ta cần xử lý ngoại lệ này khi gọi phương thức này.


Kết luận: xử lý ngoại lệ là một phần quan trọng trong việc phát triển ứng dụng Java. Việc hiểu rõ và áp dụng các cơ chế xử lý ngoại lệ sẽ giúp chúng ta tạo ra những ứng dụng ổn định và tránh được những tình huống không mong muốn.

 
Bình luận Facebook
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!