Cách bắt ngoại lệ trong java ? Bài viết hôm nay mình sẽ hướng dẫn các bạn cách bắt một ngoại lệ bằng khối try – catch.
Cách dùng khối try – catch
Khối try / catch được đặt xung quanh một đoạn chương trình dễ phát sinh ngoại lệ, cùng xem cú pháp
try{ //khối lệnh 1; } catch(ngoại_lệ_1 e1){ //khối lệnh 2; }
Khối lệnh 1: Là khối lệnh dễ phát sinh ra ngoại lệ. Khi một ngoại lệ xảy ra ngoại lệ đó phải được xử lý trong khối catch liên kết với nó.
Ngoại lệ 1: Là tên của ngoại lệ mà bạn muốn bắt trong khối lệnh 1.
Ví dụ về bắt ngoại lệ bằng khối try – catch
Ta sẽ tạo một mảng 2 phần tử và sau đó cố gắng truy cập vào phần tử thứ 3. Khi đó chương trình sẽ ném ra một ngoại lệ ArrayIndexOutOfBoundsException.
public class DemoJava { public static void main(String[] args) { int[] a = {1,2}; try{ System.out.println(a[3]); }catch (ArrayIndexOutOfBoundsException e){ System.out.println("Ngoai le phat sinh: " + e ); } System.out.print("Thoat khoi khoi try/catch"); } }
Sau khi chạy chương trình trên sẽ ra kết quả
Ngoai le phat sinh: java.lang.ArrayIndexOutOfBoundsException: 3 Thoat khoi khoi try/catch
Lưu ý: Các bạn có thể bắt ngoại lệ một cách tổng quát bằng cách dùng Exception
.
Nhiều catch blocks
Một khối try có thể được theo sau bởi nhiều khối catch. Cùng xem cách khai báo
try{ //khối lệnh 1; } catch(ngoại_lệ_1 e1){ //khối lệnh; } catch(ngoại_lệ_2 e2){ //khối lệnh; }
Ở đây mình trình bày hai khối catch nhưng bạn có thể tạo ra nhiều khối catch hơn. Nếu một ngoại lệ xảy ra trong khối try, ngoại lệ sẽ được ném vào trong khối catch thứ nhất. Nếu kiểu dữ liệu của ngoại lệ bị ném ra khớp với ngoại_lệ_1 thì nó sẽ được bắt tại đây. Nếu ngoại lệ sẽ được chuyển đến khối thứ hai. Việc này cứ tiếp tục đến khi ngoại lệ bị bắt bởi một khối catch hoặc ngoại lệ đi qua hết các khối catch.
Ví dụ
Đây là đoạn mã hiển thị cách sử dụng khối try – catch với nhiều catch blocks.
import java.io.*; public class DemoJava { public static void main(String[] args) { int x; FileInputStream file; try { file = new FileInputStream("input.txt"); x = (byte) file.read(); } catch (FileNotFoundException f){ System.out.println(f); } catch (IOException i) { System.out.println(i); } } }
Sau khi chạy sẽ nhận được kết quả
java.io.FileNotFoundException: input.txt (The system cannot find the file specified)
Khối finally
Khối finally là khối cuối cùng theo sau khối try. Một khối finally luôn luôn chạy cho dù có xảy ra ngoại lệ hay không. Thường dùng khối finally để đóng các tệp, hay dọn dẹp tài nguyên.
Cùng xem ví dụ về cách sử dụng khối finally
import java.io.*; public class DemoJava { public static void main(String[] args) { int x; FileInputStream file = null; try { file = new FileInputStream("input.txt"); x = (byte) file.read(); } catch (FileNotFoundException f){ System.out.println(f); } catch (IOException f){ System.out.println(f); } finally { System.out.println("Khoi finally da chay"); } } }
Sau khi chạy
java.io.FileNotFoundException: input.txt (The system cannot find the file specified) Khoi finally da chay
Một số lưu ý khi dùng khối try – catch – finally
- Đối với khối try có thể có nhiều khối catch hoặc không có. Nhưng khối finally thì chỉ có một.
- Khối finally sẽ không được thực thi nếu chương trình bị thoát (bằng cách gọi System.exit() hoặc xảy ra một lỗi không thể tránh khiến chương trình bị chết
- Tất cả các khối catch phải được sắp xếp từ cụ thể nhất đến chung nhất.
Bài viết mình đến đây là kết thúc. Cám ơn các bạn đã theo dõi !
Để lại một bình luận