Khi một ngoại lệ nảy sinh, có thể lựa chọn hai khả năng xử lý:
- Bắt lỗi để xử lý hay
- Bỏ qua không xử lý.
Các lệnh xử lý ngoại lệ thực hiện thông qua năm từ khoá : try, catch, finally, throw và throws
Cụ thể:
Các lệnh xử lý ngoại lệ thực hiện thông qua năm từ khoá : try, catch, finally, throw và throws
Cụ thể:
1. Câulệnh try…catch…finally
Cú pháp:
Cú pháp:
try {
// Các câu lệnh có thể sinh ngoại lệ;
}
// Các câu lệnh có thể sinh ngoại lệ;
}
catch (Exception-Tên kiểu ngoại lệ 1 )
{
// Các câu lệnh xử lý khi gặp ngoại lệ 1;
}
catch (Exception-Tên kiểu ngoại lệ 2 )
{
// Các câu lệnh có thể sinh ngoại lệ 2;
}
…
finally
}
…
finally
{
// Các câu lệnh luôn thực hiện ngay cả khi có ngoại lệ;
}
// Các câu lệnh luôn thực hiện ngay cả khi có ngoại lệ;
}
Câu lệnh : có thể là một hay nhiều lệnh đơn, hay cấu trúc điều khiển.
Ý nghĩa:
- try : định nghĩa một khối lệnh mà ngoại lệ có thể xảy ra.
- catch : đi kèm với try, để bắt ngoại lệ. Những câu lệnh trong chương trình mà bạn muốn bắt ngoại lệ được đưa vào giữa khối try, nếu một ngoại lệ xảy ra trong khối try, thân của mệnh đề catch có kiểu ngoại lệ tương ứng sẽ được thực hiện. Có thể có nhiều mệnh đề catch bắt các kiểu ngoại lệ khác nhau.
- finally : thân của mệnh đề finally luôn luôn thực hiện trước khi lệnh try kết thúc, cho dù có hay không có ngoại lệ, mệnh đề finally có thể có hay không.
2. Mệnh đề throws
Nếu một hàm chứa lệnh (lời gọi hàm) có nảy sinh ngoại lệ mà bạn không bắt lấy bằng lệnh try… catch, khi đó bạn phải cho qua ngoại lệ bằng cách thêm mệnh đề throws vào cuối khai báo hàm, nếu không trình biên dịch sẽ báo lỗi.
Ý nghĩa:
- try : định nghĩa một khối lệnh mà ngoại lệ có thể xảy ra.
- catch : đi kèm với try, để bắt ngoại lệ. Những câu lệnh trong chương trình mà bạn muốn bắt ngoại lệ được đưa vào giữa khối try, nếu một ngoại lệ xảy ra trong khối try, thân của mệnh đề catch có kiểu ngoại lệ tương ứng sẽ được thực hiện. Có thể có nhiều mệnh đề catch bắt các kiểu ngoại lệ khác nhau.
- finally : thân của mệnh đề finally luôn luôn thực hiện trước khi lệnh try kết thúc, cho dù có hay không có ngoại lệ, mệnh đề finally có thể có hay không.
2. Mệnh đề throws
Nếu một hàm chứa lệnh (lời gọi hàm) có nảy sinh ngoại lệ mà bạn không bắt lấy bằng lệnh try… catch, khi đó bạn phải cho qua ngoại lệ bằng cách thêm mệnh đề throws vào cuối khai báo hàm, nếu không trình biên dịch sẽ báo lỗi.
Sau throws liệt kê các kiểu ngoại lệ hàm có thể gây ra:
throwsException-Type1, Exception-Type2…
Exception-Type1, Exception-Type2… là các kiểu ngoại lệ cách nhau dấu phẩy
Ngoại trừ kiểu Error, RuntimeException và các kiểu lớp con của chúng có thể không cần try … catch hay throws, trình biên dịch sẽ không báo lỗi
3. Lệnh throw
Cú pháp:
throwsException-Type1, Exception-Type2…
Exception-Type1, Exception-Type2… là các kiểu ngoại lệ cách nhau dấu phẩy
Ngoại trừ kiểu Error, RuntimeException và các kiểu lớp con của chúng có thể không cần try … catch hay throws, trình biên dịch sẽ không báo lỗi
3. Lệnh throw
Cú pháp:
throw Exception-Instance;
Exception-Instance là một đối tượng của kiểu ngoại lệ
Có hai cách tạo một đối tượng kiểu ngoại lệ : dùng một tham đối trong mệnh đề catch hay tạo một đối tượng mới bằng toán tử new
Ví dụ:
Exception-Instance là một đối tượng của kiểu ngoại lệ
Có hai cách tạo một đối tượng kiểu ngoại lệ : dùng một tham đối trong mệnh đề catch hay tạo một đối tượng mới bằng toán tử new
Ví dụ:
throw new NumberFormatException();
Ý nghĩa:
Câu lệnh throw được đưa vào khối try, cho phép bạn điều khiển điều kiện phát sinh ngoại lệ. Khi gặp lệnh throw, các câu lệnh sau throw sẽ được bỏ qua, và lệnh try chứa lệnh throw, sẽ tìm khối lệnh của mệnh đề catch có kiểu ngoại lệ tương ứng để thực hiện
Ví dụ:
Ví dụ:
Viết chương trình nhập vào họ tên, và năm sinh với điều kiện họ tên không quá 30 ký tự, và năm sinh từ 1990 đến 2000
import java.io.*;
import java.io.*;
import java.util.Scanner;
class Nhap {
// Cho qua kiểu ngoại lệ IOException là lỗi nhập xuất phát sinh khi thực hiện hàm
// readLine() của lớp BufferedReader
public static void main (String[] args) throws IOException{
Scanner inp=new Scanner(System.in);
String s = null;
// Nhap ho ten
do {
class Nhap {
// Cho qua kiểu ngoại lệ IOException là lỗi nhập xuất phát sinh khi thực hiện hàm
// readLine() của lớp BufferedReader
public static void main (String[] args) throws IOException{
Scanner inp=new Scanner(System.in);
String s = null;
// Nhap ho ten
do {
System.out.print(“Nhap Ho va ten khong qua 30 ky tu: “);
s =inp.nextLine();
} while (s.length()>30 || s.length()==0);
System.out.println(“Ho va ten là : “+s);
// Nhap nam sinh
while (true) {
try {
System.out.print(“Nhap nam sinh : “);
s = inp.nextLine();
//Hàm parseInt() của lớp Integer phát sinh lỗi định dạng số
int ns =Integer.parseInt(s);
//Điều kiện phát sinh lỗi định dạng số NumberFormatException
if (ns<1990 || ns>2000) throw new NumberFormatException();
System.out.println(“Nam sinh la : “+ns);
break;
}
//Bắt kiểu ngoại lệ NumberFormatException
System.out.println(“Nam sinh la : “+ns);
break;
}
//Bắt kiểu ngoại lệ NumberFormatException
catch(NumberFormatException e){
System.out.println(“Ban nhap lai nam sinh tu 1980 -1985″);
}
}
}
}
}
}
}
Một số tài liệu và khoá học bổ ích dành cho bạn:
# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]
# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]