- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java
Bài 30: Hướng dẫn xử lý ngoại lệ trong Java - Lập trình Java cơ bản
Đăng bởi: Admin | Lượt xem: 2958 | Chuyên mục: Java
1. Khối try-catch-finally
Khối lệnh try trong java được sử dụng để chứa một đoạn code có thế xảy ra một ngoại lệ. Nó phải được khai báo trong phương thức. Sau một khối lệnh try bạn phải khai báo khối lệnh catch hoặc finally hoặc cả hai. Cú pháp:
try{
//code ma co the nem exception
}catch(Exception_class_Name ref){}
try{
//code ma co the nem exception
}finally{}
Vai trò của từng khối:
- catch: Khối catch trong java được sử dụng để xử lý các Exception. Nó phải được sử dụng sau khối try.
- finally: Khối lệnh finally trong java được sử dụng để thực thi các lệnh quan trọng như đóng kết nối, đóng stream,...Nó 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.
Nếu bạn phải thực hiện các tác vụ khác nhau mà ở đó có thể xảy ra các ngoại lệ khác nhau, hãy sử dụng đa khối lệnh catch trong java. Ví dụ:
public class TestMultiCatchBlock{
public static void main(String args[]){
try{
int a[]=new int[5];
a[5]=30/0;
}
catch(ArithmeticException e){System.out.println("Task1 duoc hoan thanh");}
catch(ArrayIndexOutOfBoundsException e){System.out.println("Task2 duoc hoan thanh");}
catch(Exception e){System.out.println("Task chung duoc hoan thanh");}
System.out.println("Phan code con lai...");
}
}
Khi sử dụng đa khối lệnh catch, chúng ta cần tuân thủ các nguyên tắc sau:
- Vào một thời điểm chỉ xảy ra một ngoại lệ và tại một thời điểm chỉ có một khối catch được thực thi.
- Tất cả các khối catch phải được sắp xếp từ cụ thể nhất đến chung nhất, tức là phải khai báo khối lệnh catch để xử lý lỗi ArithmeticException trước khi khai báo catch để xử lý lỗi Exception.
Không chỉ vậy, đôi khi một tình huống có thể phát sinh khi một phần của một khối lệnh có thể xảy ra một lỗi và toàn bộ khối lệnh chính nó có thể xảy ra một lỗi khác. Do đó, trong những trường hợp như vậy, trình xử lý ngoại lệ try cũng phải được lồng nhau. Ví dụ:
public class TestException {
public static void main(String args[]) {
try {
try {
System.out.println("Thuc hien phep chia");
int b = 39 / 0;
} catch (ArithmeticException e) {
System.out.println(e);
}
try {
int a[] = new int[5];
a[5] = 4;
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}
System.out.println("khoi lenh khac");
} catch (Exception e) {
System.out.println("xy ly ngoai le");
}
System.out.println("tiep tuc chuong trinh..");
}
}
2. Throw và Throws
Từ khoá throw trong java đượ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 từ khóa throw:
throw exception;
Ví dụ: Trong ví dụ này, chúng ta đã tạo phương thức validate mà nhận giá trị nguyên như là một tham số. Nếu tuoi là nhỏ hơn 18, chúng ta ném ArithmeticException, nếu không chúng ta sẽ in một thông báo là: Chao mung ban den bo phieu.
public class TestThrow1 {
static void validate(int age) {
if (age < 18)
throw new ArithmeticException("not valid");
else
System.out.println("welcome");
}
public static void main(String args[]) {
validate(13);
System.out.println("rest of the code...");
}
}
Kết quả thu được:
Exception in thread "main" java.lang.ArithmeticException: not valid
Từ khóa throws trong java đượ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. Exception Handling chủ yếu được sử dụng để xử lý ngoại lệ checked. Nếu xảy ra bất kỳ ngoại lệ unchecked như NullPointerException, đó là lỗi của lập trình viên mà anh ta không thực hiện kiểm tra trước khi code được sử dụng. Cú pháp:
kieu_tra_ve ten_phuong_thuc() throws ten_lop_exception{
//phan code cua phuong thuc
}
Từ khóa này chỉ chỉ dành cho Checked Exception, bởi vì:
- Unchecked Exception: dưới sự điều khiển của bạn bằng việc kiểm tra và sửa lỗi code.
- Error: Vượt quá tầm kiểm soát của bạn, ví dụ: bạn không thể làm điều gì nếu xuất hiện VirtualMachineError hoặc StackOverflowErrror.
Phân biệt throw và throws trong Java
throw | throws |
---|---|
Từ khóa throw được sử dụng để ném tường minh một exception | Từ khóa throws được sử dụng để khai báo một exception |
Checked Exception không thể được lan truyền chỉ bởi sử dụng throw | Checked Exception không thể được lan truyền với throws |
Throw được theo sau bởi một instance | Throws được theo sau bởi một lớp |
Throw được sử dụng bên trong một phương thức | Throws được sử dụng với khai báo phương thức |
Bạn có thể ném nhiều exception | Bạn có thể khai báo nhiều exception, ví dụ public void phuong_thuc()throws IOException,SQLException |
3. Custom Exception
Custom Exception là ngoại lệ do bạn tự định nghĩa hay bạn tự tạo riêng cho mình. Custom Exception trong Java được sử dụng để tùy biến ngoại lệ theo yêu cầu của người dùng. Bởi sự giúp đỡ của loại ngoại lệ này, bạn có thể có riêng kiểu và thông điệp ngoại lệ cho mình. Ví dụ:
class InvalidAgeException extends Exception{
InvalidAgeException(String s){
super(s);
}
}
class TestCustomException1{
static void validate(int age)throws InvalidAgeException{
if(age<18)
throw new InvalidAgeException("Khong hop le");
else
System.out.println("Chao mung ban toi bo phien");
}
public static void main(String args[]){
try{
validate(13);
}catch(Exception m){System.out.println("Exception xuat hien: "+m);}
System.out.println("Phan code con lai...");
}
}
Kết quả thu được sau khi chạy chương trình là:
Exception xuat hien: InvalidAgeException:Khong hop le
Phan code con lai...
Như vậy, qua bài viết này, chúng ta đã cùng nhau tìm hiểu cách xử lý ngoại lệ trong Java bằng các cách khau nhau. Cảm ơn các bạn đã đọc.
Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!
- Bài 1: Tổng quan ngôn ngữ Java
- Bài 2: Hướng dẫn cài đặt và cấu hình Java
- Bài 3: Hướng dẫn cài đặt và cấu hình Intellij IDEA trên Window
- Bài 4: Tạo Project và làm quen với Intelij IDEA
- Bài 5: Cú pháp và quy tắc cơ bản trong Java
- Bài 6: Các kiểu dữ liệu trong Java
- Bài 7: Các kiểu biến trong Java
- Bài 8: Toán tử trong Java
- Bài 9: Hệ thống Unicode trong Java
- Bài 10: Các kiểu vòng lặp
- Bài 11: Câu lệnh điều khiển rẽ nhánh
- Bài 12: Câu lệnh Break, Continue trong Java
- Bài 13: Lớp và đối tượng
- Bài 14: Tính chất của lập trình hướng đối tượng trong Java
- Bài 15: Abstract class và Interface trong Java
- Bài 16: Từ khóa super và this trong Java
- Bài 17: Từ khóa static và final trong Java
- Bài 18: Mảng (Array) trong Java
- Bài 19: Package trong Java
- Bài 21: String trong Java
- Bài 22: StringBuffer và StringBuilder
- Bài 23: Tổng quan về File và I/O
- Bài 24: Xử lý nhập xuất bằng Byte Stream và Character Stream
- Bài 25: Thao tác với tệp và thư mục trong Java
- Bài 26: Tổng quan về Collection trong Java
- Bài 27: Những Interface phổ biến trong Java Collection Framework
- Bài 28: Những Class được triển khai dựa trên Interface của Java Collection
- Bài 29: Khái niệm xử lý ngoại lệ trong Java
- Bài 30: Hướng dẫn xử lý ngoại lệ trong Java
- Bài 31: Đa luồng trong Java
- Bài 32: Thread synchronization trong Java
- Bài 33: Tổng quan về Java AWT
- Bài 34: Container trong Java AWT
- Bài 35: Component trong Java AWT
- Bài 36: Layout Manager trong Java AWT
- Bài 37: Xử lý sự kiện trong Java AWT
- Bài 38: Tổng quan về Java Swing
- Bài 39: Container trong Java Swing
- Bài 40: Component trong Java Swing
- Bài 41: Layout trong Java Swing
- Bài 42: Event trong Java Swing
- Bài 43: Menu trong Java Swing
- Bài 44: Kết nối cơ sở dữ liệu với thư viện JDBC trong Java