Exception trong Java là gì?
Ngoại lệ trong Java là một sự kiện làm gián đoạn việc thực hiện các lệnh của chương trình và làm xáo trộn luồng thực thi bình thường của chương trình. Nó là một đối tượng bao bọc một thông tin sự kiện lỗi xảy ra trong một phương thức và nó được chuyển đến hệ thống thời gian chạy. Trong Java, các ngoại lệ chủ yếu được sử dụng để chỉ ra các loại điều kiện lỗi khác nhau.
Trong hướng dẫn này, bạn sẽ học-
- Ngoại lệ là gì?
- Tại sao chúng ta cần Exception?
- Cách xử lý Ngoại lệ
- Thử bắt khối
- Cấu trúc phân cấp lớp ngoại lệ trong Java
- Khối cuối cùng của Java
Có hai loại lỗi:
- Biên dịch lỗi thời gian
- Lỗi thời gian chạy
Lỗi thời gian biên dịch có thể được phân loại lại thành hai loại:
- Lỗi cú pháp
- Lỗi ngữ nghĩa
Ví dụ về lỗi cú pháp:
Thay vì khai báo
int a;
bạn đã khai báo sai in a;
vì trình biên dịch nào sẽ báo lỗi.
Ví dụ: Bạn đã khai báo một biến
int a;
và sau một số dòng mã, bạn lại khai báo một số nguyên là int a;
. Tất cả những lỗi này được đánh dấu khi bạn biên dịch mã.
Ví dụ về lỗi thời gian chạy
Lỗi Runtime được gọi là lỗi Exceptions . Đó là bất kỳ sự kiện nào làm gián đoạn quá trình thực thi chương trình bình thường.
Ví dụ cho các ngoại lệ là, ngoại lệ số học, ngoại lệ Nullpointer, ngoại lệ Chia cho 0, v.v.
Các ngoại lệ trong Java là thứ nằm ngoài tầm kiểm soát của các nhà phát triển.
Bấm vào đây nếu video không thể truy cập được
Tại sao chúng ta cần Exception?
Giả sử bạn đã viết mã một chương trình để truy cập vào máy chủ. Mọi thứ hoạt động tốt trong khi bạn đang phát triển mã.
Trong quá trình chạy sản xuất thực tế, máy chủ không hoạt động. Khi chương trình của bạn cố gắng truy cập nó, một ngoại lệ được đưa ra.
Cách xử lý Ngoại lệ
Cho đến nay chúng tôi đã thấy, ngoại lệ nằm ngoài tầm kiểm soát của nhà phát triển. Nhưng đổ lỗi cho lỗi mã của bạn về các vấn đề môi trường không phải là một giải pháp. Bạn cần một Lập trình mạnh mẽ, xử lý các tình huống đặc biệt. Mã như vậy được gọi là Trình xử lý ngoại lệ.
Trong ví dụ của chúng tôi, việc xử lý ngoại lệ tốt sẽ là, khi máy chủ gặp sự cố, hãy kết nối với máy chủ dự phòng.
Để thực hiện điều này, hãy nhập mã của bạn để kết nối với máy chủ (Sử dụng các điều kiện if và else truyền thống).
Bạn sẽ kiểm tra xem máy chủ có bị lỗi không. Nếu có, hãy viết mã để kết nối với máy chủ sao lưu.
Việc tổ chức mã như vậy, sử dụng vòng lặp "if" và "else" không hiệu quả khi mã của bạn có nhiều ngoại lệ java cần xử lý.
class connect{if(Server Up){// code to connect to server}else{// code to connect to BACKUP server}}
Thử bắt khối
Java cung cấp một xử lý đặc biệt sẵn có.
- Mã bình thường đi vào một khối TRY .
- Mã xử lý ngoại lệ đi vào khối CATCH
Trong ví dụ của chúng tôi, khối TRY sẽ chứa mã để kết nối với máy chủ. Khối CATCH sẽ chứa mã để kết nối với máy chủ dự phòng.
Trong trường hợp máy chủ hoạt động, mã trong khối CATCH sẽ bị bỏ qua. Trong trường hợp máy chủ không hoạt động, một ngoại lệ được đưa ra và mã trong khối bắt sẽ được thực thi.
Vì vậy, đây là cách xử lý ngoại lệ trong Java.
Cú pháp để sử dụng try & catch
try{statement(s)}catch (exceptiontype name){statement(s)}
Thí dụ
Bước 1) Sao chép mã sau vào trình chỉnh sửa
class JavaException {public static void main(String args[]){int d = 0;int n = 20;int fraction = n/d;System.out.println("End Of Main");}}
Bước 2) Lưu tệp và biên dịch mã. Chạy chương trình bằng lệnh, java JavaException
Bước 3) Một ngoại lệ số học - chia cho 0 được hiển thị như bên dưới cho dòng số 5 và dòng số 6 không bao giờ được thực thi
Bước 4) Bây giờ chúng ta hãy xem xét thử và bắt sẽ giúp chúng ta xử lý ngoại lệ này như thế nào. Chúng tôi sẽ đặt ngoại lệ gây ra dòng mã vào một khối thử , theo sau là một khối bắt . Sao chép mã sau vào trình chỉnh sửa.
class JavaException {public static void main(String args[]) {int d = 0;int n = 20;try {int fraction = n / d;System.out.println("This line will not be Executed");} catch (ArithmeticException e) {System.out.println("In the catch Block due to Exception = " + e);}System.out.println("End Of Main");}}
Bước 5) Lưu, Biên dịch và Chạy mã. Bạn sẽ nhận được kết quả sau
Như bạn quan sát, ngoại lệ được xử lý và dòng mã cuối cùng cũng được thực thi. Ngoài ra, lưu ý rằng Dòng số 7 sẽ không được thực thi bởi vì ngay sau khi một ngoại lệ được nâng lên, luồng điều khiển sẽ nhảy đến khối bắt.
Lưu ý: Đối tượng AritmeticException "e" mang thông tin về ngoại lệ đã xảy ra có thể hữu ích trong việc thực hiện các hành động khôi phục.
Cấu trúc phân cấp lớp ngoại lệ trong Java
Sau khi một câu lệnh catch thực thi, các câu lệnh khác bị bỏ qua và việc thực thi tiếp tục sau khối try / catch. Các khối bắt lồng nhau tuân theo phân cấp Ngoại lệ.- Tất cả các lớp ngoại lệ trong Java đều mở rộng lớp 'Throwable'. Throwable có hai lớp con, Lỗi và Ngoại lệ
- Lớp Lỗi xác định ngoại lệ hoặc các vấn đề mà chương trình của chúng tôi không mong đợi xảy ra trong các trường hợp bình thường, ví dụ: Lỗi bộ nhớ, Lỗi phần cứng, lỗi JVM, v.v.
- Lớp Exception đại diện cho các ngoại lệ có thể được xử lý bởi chương trình của chúng tôi và chương trình của chúng tôi có thể được khôi phục từ ngoại lệ này bằng cách sử dụng khối try and catch
- Một ngoại lệ Runtime là một lớp con của lớp ngoại lệ. Ngoại lệ của loại này đại diện cho ngoại lệ xảy ra tại thời gian chạy và không thể được theo dõi tại thời gian biên dịch. Một ví dụ tuyệt vời của cùng là chia cho ngoại lệ 0, hoặc ngoại lệ con trỏ null, v.v.
- IO ngoại lệ được tạo ra trong các hoạt động đầu vào và đầu ra
- Các ngoại lệ bị gián đoạn trong Java, được tạo ra trong nhiều luồng.
Bước 1) Sao chép mã sau vào trình chỉnh sửa.
class JavaException {public static void main(String args[]) {try {int d = 1;int n = 20;int fraction = n / d;int g[] = {1};g[20] = 100;}/*catch(Exception e){System.out.println("In the catch block due to Exception = "+e);}*/catch (ArithmeticException e) {System.out.println("In the catch block due to Exception = " + e);} catch (ArrayIndexOutOfBoundsException e) {System.out.println("In the catch block due to Exception = " + e);}System.out.println("End Of Main");}}
Bước 2) Lưu tệp và biên dịch mã. Chạy chương trình bằng lệnh, java JavaException .
Bước 3) Một ArrayIndexOutOfBoundsException được tạo. Thay đổi giá trị của int d thành 0. Lưu, Biên dịch và Chạy mã.
Bước 4 ) Một ArithmeticException phải được tạo.
Bước 5) Bỏ ghi chú dòng # 10 đến dòng # 12. Lưu, biên dịch và chạy mã.
Bước 6) Lỗi biên dịch? Điều này là do Exception là lớp cơ sở của ArithmeticException Exception. Bất kỳ ngoại lệ nào được nâng lên bởi ArithmeticException cũng có thể được xử lý bởi lớp Exception. Do đó lỗi biên dịch.
Khối cuối cùng của Java
Khối cuối cùng được thực thi bất kể ngoại lệ được đưa ra trong khối thử. Nó là tùy chọn để sử dụng với khối thử.
try {statement(s)} catch (ExceptiontType name) {statement(s)} finally {statement(s)}
Trong trường hợp, một ngoại lệ được đưa ra trong khối try, khối cuối cùng được thực thi sau khi khối catch được thực thi.
Thí dụ
Bước 1) Sao chép mã sau vào trình chỉnh sửa.
class JavaException {public static void main(String args[]){try{int d = 0;int n =20;int fraction = n/d;}catch(ArithmeticException e){System.out.println("In the catch block due to Exception = "+e);}finally{System.out.println("Inside the finally block");}}}
Bước 2) Lưu, biên dịch và chạy mã.
Bước 3) Sản lượng mong đợi. Cuối cùng khối được thực thi ngay cả khi một ngoại lệ được nâng lên.
Bước 4) Thay đổi giá trị của biến d = 1. Lưu, biên dịch và chạy mã và quan sát đầu ra.
Tóm tắt :
- Một ngoại lệ là một lỗi thời gian chạy mà làm gián đoạn dòng chảy bình thường của chương trình execution.Disruption trong quá trình thực hiện chương trình được gọi là lỗi hay là ngoại lệ.
- Lỗi được phân thành hai loại
- Lỗi thời gian biên dịch - Lỗi cú pháp, lỗi ngữ nghĩa
- Lỗi thời gian chạy- Ngoại lệ
- Một chương trình mạnh mẽ phải xử lý tất cả các ngoại lệ và tiếp tục với quy trình thực thi chương trình bình thường của nó. Java cung cấp một phương pháp xử lý đặc biệt có sẵn
- Exception Handler là một bộ mã xử lý một ngoại lệ . Các ngoại lệ có thể được xử lý trong Java bằng cách sử dụng try & catch.
- Thử khối : Mã bình thường đi trên khối này.
- Khối bắt : Nếu có lỗi trong mã bình thường, thì nó sẽ đi vào khối này