Khối lệnh Try Catch là một khái niệm quan trọng và là một trong các kỹ thuật được sử dụng trong khi lập trình để xử lý trường hợp ngoại lệ. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về câu lệnh try catch trong Java cùng với các ví dụ dẫn chứng.
Try Catch trong Java
Khối Try Catch trong Java được sử dụng để nhằm xử lý các ngoại lệ được đưa ra và giúp chương trình tránh việc kết thúc bất thường của chương trình.
Cú pháp:
1 2 3 4 5 6 |
try{ // Đoạn mã 1 } catch(exception) { // Đoạn mã 2 } |
Khối try bao gồm đoạn mã có thể tạo ra một ngoại lệ. Khối Catch bao gồm đoạn mã được thực thi khi xảy ra ngoại lệ bên trong khối Try.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 |
class Main { public static void main(String[] args) { try { int phep_chia = 27 / 0; } catch (ArithmeticException e) { System.out.println(e.getMessage()); } } } |
Trong ví dụ trên, ta sử dụng biểu thức sau:
1 |
int phep_chia = 27 / 0 |
Ở đây, chúng ta đang thực hiện phép chia cho giá trị 0. Trong trường hợp này, một ngoại lệ sẽ xảy ra. Do đó, chúng ta đã đặt mã này bên trong khối Try. Và ngoại lệ được bắt bởi khối Catch và thực thi đoạn mã bên trong khối. Khối Catch chỉ được thực thi nếu tồn tại một ngoại lệ bên trong khối Try.
Chú ý: Trong Java, chúng ta có thể sử dụng khối Try mà không cần khối Catch. Tuy nhiên, chúng ta không thể sử dụng khối Catch mà không có khối Try.
Sử dụng khối Try và Finally
Chúng ta cũng có thể sử dụng khối Try cùng với khối Finally. Trong trường hợp này, khối Finally luôn được thực thi cho dù có ngoại lệ bên trong khối Try xảy ra hay không.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 |
class Main { public static void main(String[] args) { try { int phep_chia = 27 / 0; } finally{ System.out.println("Chuong trinh hoan thanh"); } } } |
Kết quả:
1 2 3 |
Chuong trinh hoan thanh Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:5) |
Trong ví dụ trên, chúng ta đã sử dụng khối Try cùng với khối Finally. Chúng ta có thể thấy rằng đoạn mã bên trong khối Try tạo ra một ngoại lệ. Tuy nhiên, đoạn mã bên trong khối Finally được thực thi bất kể ngoại lệ xảy ra.
Khối lệnh Try Catch và Finally
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.io.*; class Main { public static void main(String[] args) { try { int a = 32 / 0; } catch (Exception e) { System.out.println(e.getMessage()); } finally { System.out.println("Hoan thanh!"); } } } |
Kết quả:
1 2 |
/ by zero Hoan thanh! |
Sử dụng khối Finally thường xuyên trong khi lập trình là một cách tốt để thực hiện các đoạn mã rõ ràng và kết thúc mạch lạc.
Chú ý: Có một số trường hợp mà khối Finally không thực thi, bao gồm:
- Sử dụng phương thức System.exit().
- Một ngoại lệ xảy ra trong khối Finally.
- Luồng thực thi kết thúc.
Sử dụng nhiều khối Catch
Đối với mỗi khối Try, có thể không có hoặc nhiều khối Catch. Nhiều khối Catch cho phép chúng ta xử lý mỗi ngoại lệ khác nhau. Kiểu đối số của mỗi khối Catch sẽ cho biết kiểu ngoại lệ có thể được xử lý.
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Main { public static void main(String[] args) { int[] mang = new int[5]; try { mang[6] = 12; } catch (ArithmeticException a) { System.out.println(a.getMessage()); } catch (IndexOutOfBoundsException b) { System.out.println("Loi vuot qua chi so cho phep: " + b.getMessage()); } } } |
Kết quả:
1 |
Loi vuot qua chi so cho phep: 6 |
Trong ví dụ này, ta đã tạo một mảng số nguyên có tên là mang có kích thước là 5. Vì chỉ số mảng bắt đầu từ 0, nên phần tử cuối cùng của mảng là mang[4]. Tuy nhiên, ta đã truy cập vào mang[6], do đó, trường hợp ngoại lệ IndexOutOfBoundException đã xảy ra.
Khi một ngoại lệ xảy ra trong khối Try:
- Ngoại lệ được truyền cho khối Catch đầu tiên. Khối Catch này không xử lý ngoài lệ IndexOutOfBoundsException, vì vậy nó được truyền cho khối Catch thứ hai.
- Khối Catch thứ hai trong ví dụ trên có thể xử lý ngoại lệ này, do đó, đoạn mã bên trong nó được thực thi.
Xử lý nhiều ngoại lệ
Từ Java SE 7 trở lên, giờ đây ta có thể bắt được nhiều loại ngoại lệ với một khối Catch. Điều này làm giảm sự trùng lặp các đoạn mã và tăng tính đơn giản và hiệu quả trong lập trình. Mỗi loại ngoại lệ có thể được xử lý bởi khối Catch được phân tách bằng thanh dọc |.
Cú pháp:
1 2 3 4 5 |
try { // Đoạn mã 1 } catch (Ngoại_lệ_1 | Ngoại_lệ_2 a) { // Đoạn mã 2 } |
Trên đây là khái niệm và ví dụ cơ bản về khối lệnh Try Catch trong Java. Hy vọng mọi người có thể áp dụng vào trong chương trình của mình. Mọi người hãy tiếp tục theo dõi các bài tiếp theo và cập nhật các bài mới nhất trên tek4 nhé!
P/s: Cảm ơn mọi người!