You are on page 1of 5

Ngoại lệ trong Java

Contents
1. Khái niệm................................................................................................................................................................2
2. Các kiểu exception.................................................................................................................................................2
3. Điều khiển ngoại lệ.................................................................................................................................................2
4. Multi catch block – đa khối lệnh catch..................................................................................................................4
5. Tự định nghĩa Exception........................................................................................................................................4
6. Tìm hiểu một số exception cơ bản.........................................................................................................................4
(NullPointerException, NumberFormatException)........................................................................................................4
Bài tập............................................................................................................................................................................5
1. Khái niệm
- Một ngoại lệ (Exception) trong Java là một vấn đề phát sinh trong quá trình thực
thi chương trình. Khi xảy ra ngoại lệ, luồng xử lý (flow) bị gián đoạn, chương
trình/ứng dụng dừng bất thường. Nó là một đối tượng được ném ra tại Runtime.
- Ngoại lệ trong Java có thể xảy ra vì nhiều lý do khác nhau:
o Nhập dữ liệu không hợp lệ.
o Không tìm thấy file cần mở.
o Kết nối mạng bị ngắt trong qua trình thực hiện giao tác.
o JVM hết bộ nhớ.
o Truy cập vượt ngoài chỉ số của mảng, v...v...
- Ngoại lệ xảy ra có thể do người dùng, lập trình viên hoặc số khác do tài nguyên bị
lỗi. Java Exception được triển khai bằng cách sử dụng các lớp như Throwable,
Exception, RuntimeException và các từ khóa như throw, throws, try, catch, finally.

2. Các kiểu exception


2.1. Ngoại lệ được kiểm tra (Checked Exceptions)
- Là một ngoại lệ được kiểm tra và thông báo bởi trình biên dịch tại thời điểm biên
dịch, chúng cũng có thể được gọi là ngoại lệ thời gian biên dịch (Compile-time
Exceptions). Và lập trình viên không thể lường trước.
2.2. Ngoại lệ không được kiểm tra (Unchecked Exceptions)
- Là một ngoại lệ không được kiểm tra trong quá trình biên dịch. Chúng cũng được
gọi là ngoại lệ thời gian chạy (Runtime Exceptions). Là ngoại lệ có thể tránh được
bởi lập trình viên. Unchecked Exceptions kế thừa từ Runtime Exception.
2.3. Lỗi (Error)
- Error là những vấn đề nghiêm trọng liên quan đến môi trường thực thi của ứng
dụng hoặc hệ thống mà lập trình viên không thể kiểm soát. Nó thường làm chết
chương trình.
- Lớp Error định nghĩa các ngoại lệ mà không thể bắt (catch) từ chương trình.

3. Điều khiển ngoại lệ


3.1. Try-catch

Cú pháp:
try {
// Đoạn mã
}
catch(Exception e) {
// Đoạn mã 2
}
- Đoạn mã có thể tạo ra một ngoại lệ được đặt trong khối try. Mỗi khối try được theo
sau bởi một khối catch. Khi một ngoại lệ xảy ra, nó sẽ được bắt bởi khối catch. Ta sẽ
không thể sử dụng khối catch nếu không có khối try.

3.2. Throw

- Từ khóa throw được sử dụng để ném ra một ngoại lệ cụ thể. Chúng ta có thể ném
một trong hai ngoại lệ checked hoặc unchecked trong java bằng từ khóa throw.
Từ khóa throw chủ yếu được sử dụng để ném ngoại lệ tùy chỉnh (ngoại lệ do
người dùng tự định nghĩa).
- Cú pháp:
throw exception;
VD: throw new IOException(“File không tồn tại.”);

3.3. Throws
- Từ khóa throws được sử dụng để khai báo một ngoại lệ. Nó thể hiện thông tin cho
lập trình viên rằng có thể xảy ra một ngoại lệ, vì vậy nó là tốt hơn cho các lập trình
viên để cung cấp các mã xử lý ngoại lệ để duy trì luồng bình thường của chương
trình.
- Cú pháp:
return_type method_name() throws exception_class_name {
//method code
}

return_type: định dạng giá trị trả về


method_name: tên phương thức
exception_class_name: tên lớp ngoại lệ
3.4. Finally
- Khối lệnh finally được sử dụng để thực thi các lệnh quan trọng như đóng kết nối,
đóng các stream,...
- Khối lệnh finally trong java luôn được thực thi cho dù có ngoại lệ xảy ra hay
không hoặc gặp lệnh return trong khối try.
- Khối lệnh finally trong java được khai báo sau khối lệnh try hoặc sau khối lệnh
catch.

4. Multi catch block – đa khối lệnh catch


- Một khối thử có thể được theo sau bởi một hoặc nhiều khối catch. Mỗi khối catch
phải chứa một trình xử lý ngoại lệ khác nhau. Vì vậy, nếu bạn phải thực hiện các
tác vụ khác nhau khi xảy ra các ngoại lệ khác nhau, hãy sử dụng khối multiple
catch.

5. Tự định nghĩa Exception


- Chúng ta có thể tạo một exception mới để phục vụ cho các yêu cầu riêng của
dự án bằng cách kế thừa từ Exception class.
- Cú pháp:
class ten_exception extends Exception {
//Constructor
ten_exception( String s) {
super(s);
}
}

6. Tìm hiểu một số exception cơ bản


(NullPointerException, NumberFormatException)
- NullPointerException: Nếu chúng ta có bất kỳ biến nào có giá trị null , thực
hiện bất kỳ hoạt động nào bởi biến đó sẽ xảy ra ngoại lệ NullPointerException.
o Ví dụ:
String s = null;
System.out.println(s.length()); //NullPointerException
- NumberFormatException: Sự định dạng sai của bất kỳ giá trị nào, có thể xảy ra
NumberFormatException. Giả sử ta có một biến String có giá trị là các ký tự,
chuyển đổi biến này thành số sẽ xảy ra NumberFormatException
o Ví dụ:
String s = “HelloWorld”;
int i = Integer.parseInt(s); //NumberFormatException

Bài tập
Bài 1:

Root class of exception hierachy Exception


Attempt to access “null” object member NullPointerException
Unable to load class ClassNotFoundException
Array size greater than 0, or greater than ArrayIndexOutOfBoundException
Invalid conversion of string to a numeric NumberFormatException
float
Inability to locate a file FileNotFoundException
A requested method does not exist NoSuchMethodException

You might also like