Xử lý ngoại lệ trong Java
Ngoại lệ trong Java?
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 chương trình và làm xáo trộn luồng thực thi chương trình bình thường. Nó là một đối tượng bao bọc 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.
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 nhầm nó là in a;
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ả các lỗi này đều được đánh dấu khi bạn biên dịch mã.
Ví dụ về lỗi thời gian chạy
Lỗi trong thời gian chạy được gọi là lỗi Trường hợp ngoại lệ lỗi. Đó là bất kỳ sự kiện nào làm gián đoạn luồng thực thi chương trình bình thường. Ví dụ về ngoại lệ là, ngoại lệ số học, ngoại lệ Nullpointer, ngoại lệ Chia cho số không, v.v. Ngoại lệ trong Java là thứ nằm ngoài tầm kiểm soát của nhà phát triển.
Nhấp chuột đây nếu video không thể truy cập được
Tại sao chúng ta cần Ngoại lệ?
Giả sử bạn đã mã hóa 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 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 vào nó, một ngoại lệ sẽ xuất hiện.
Cách xử lý ngoại lệ
Cho đến nay chúng ta đã 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 lỗi mã của bạn cho 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, cách xử lý ngoại lệ tốt sẽ là khi máy chủ ngừng hoạt động, 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ị sập không. Nếu có, hãy viết mã để kết nối với máy chủ dự phòng. 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 giải quyết.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Hãy thử bắt khối
Java cung cấp khả năng xử lý đặc biệt sẵn có.
- Mã bình thường đi vào một DEMO khối.
- Mã xử lý ngoại lệ đi vào NẮM LẤY chặn
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ủ đang hoạt động, mã trong khối CATCH sẽ bị bỏ qua. Trong trường hợp máy chủ ngừng hoạt động, một ngoại lệ được đưa ra và mã trong khối catch 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 thử và bắt
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Ví dụ
Bước 1) Sao chép mã sau vào trình soạn thảo
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 JavaNgoại lệ
Bước 3) Một ngoại lệ số học – chia cho 5 được hiển thị như bên dưới cho dòng số 6 và dòng số XNUMX không bao giờ được thực thi
Bước 4) Bây giờ 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ệ khiến dòng mã thành một thử khối, theo sau là một bắt khối. Sao chép mã sau vào trình soạn thảo.
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 #7 sẽ không được thực thi vì ngay khi một ngoại lệ được nâng lên, luồng điều khiển sẽ chuyển sang khối bắt.
Lưu ý: Đối tượng AritmeticException “e” mang thông tin về ngoại lệ đã xảy ra, thông tin này có thể hữu ích trong việc thực hiện các hành động khôi phục.
Java Phân cấp lớp ngoại lệ
Sau khi một câu lệnh bắt được thực thi, các câu lệnh khác sẽ được 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 hệ thống phân cấp Ngoại lệ.
- Tất cả các lớp ngoại lệ trong Java mở rộng lớp 'Có thể ném được'. 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 sự cố mà chương trình của chúng tôi dự kiến sẽ không xảy ra trong các trường hợp thông thường, ví dụ: Lỗi bộ nhớ, Lỗi phần cứng, lỗi JVM, v.v.
- Lớp Ngoại lệ đại diện cho các ngoại lệ mà chương trình của chúng tôi có thể xử lý 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 thử và bắ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 biểu diễn ngoại lệ xảy ra tại thời điểm chạy và không thể theo dõi tại thời điểm biên dịch. Một ví dụ tuyệt vời về ngoại lệ này là ngoại lệ chia cho số không hoặc ngoại lệ con trỏ null, v.v.
- Ngoại lệ IO được tạo trong các hoạt động đầu vào và đầu ra
- Ngoại lệ bị gián đoạn trong Java, được tạo ra trong quá trình xử lý đa luồng.
Ví dụ: Để hiểu cách lồng các khối thử và bắt
Bước 1) Sao chép đoạn mã sau vào trình soạn thảo.
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 tin và biên dịch mã. Chạy chương trình bằng lệnh, Java JavaNgoại lệ.
Bước 3) Một ArrayIndexOutOfBoundsException được tạo ra. 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 ngoại lệ số học phải được tạo ra.
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) Dịch lỗi? Điều này là do Ngoại lệ là lớp cơ sở của Ngoại lệ ArithmeticException. Bất kỳ Ngoại lệ nào được ArithmeticException đưa ra cũng có thể được xử lý bởi lớp Exception. Vì vậy, khối bắt của ArithmeticException sẽ không bao giờ có cơ hội được thực thi, điều này khiến nó trở nên dư thừa. Do đó có lỗi biên dịch.
Java Cuối cùng chặn
Khối cuối cùng là được thực thi bất kể ngoại lệ được nêu ra trong khối thử. Nó là không bắt buộc để sử dụng với khối thử.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Trong trường hợp ngoại lệ được đưa ra trong khối thử, khối cuối cùng sẽ được thực thi sau khối bắt được thực thi.
Ví dụ
Bước 1) Sao chép đoạn mã sau vào trình soạn thảo.
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 dự kiến. Khối cuối cùng được thực thi ngay cả khi có ngoại lệ được đưa ra.
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.Bottom của biểu mẫu
Tổng kết
- An Ngoại lệ là lỗi thời gian chạy làm gián đoạn luồng thực thi chương trình thông thường. Sự gián đoạn trong quá trình thực thi chương trình được gọi là lỗi hoặc 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ệ
- A chương trình mạnh mẽ sẽ xử lý tất cả các trường hợp ngoại lệ và tiếp tục luồng thực thi chương trình bình thường. Java cung cấp một phương pháp xử lý đặc biệt sẵn có
- Trình xử lý ngoại lệ là một bộ mã xử lý một ngoại lệ. Các ngoại lệ có thể được xử lý trong Java sử dụng thử và bắt.
- Thử khối: Mã thông thường đi trên khối này.
- bắt khối: Nếu code bình thường có lỗi thì nó sẽ vào khối này