Dart Exceptions là lỗi thời gian chạy. Nó được nâng lên khi chương trình được thực thi. Chương trình không báo lỗi tại thời điểm biên dịch khi chương trình chạy nội bộ và nếu trình biên dịch Dart tìm thấy điều gì đó không phù hợp. Sau đó, nó báo lỗi thời gian chạy và việc thực thi chương trình bị chấm dứt bất thường. Loại lỗi này được gọi là Exceptions. Ví dụ – Một số nhất định bị chia cho số 0 hoặc chúng tôi cố gắng truy cập các phần tử từ danh sách trống.
Các bài viết liên quan:
Dart hỗ trợ các loại Exceptions tích hợp sau.
Sr. | Exceptions | Sự miêu tả |
1. | DefferedLoadException | Nó được ném khi một thư viện hoãn lại không tải được. |
2. | FromatException | Nó là Exceptions được ném |
3. | IntegerDivisionByZeroException | Nó được ném khi số bị chia cho số không. |
4. | IOEException | Nó là lớp cơ sở của Exceptions liên quan đến đầu vào-đầu ra. |
5. | IsolateSpawnException | Nó được ném ra khi không thể tạo một vùng cách ly. |
6. | Timeout | Nó được đưa ra khi một thời gian chờ lịch trình xảy ra trong khi chờ kết quả không đồng bộ. |
Mục tiêu chính của Exceptions là xử lý lỗi thời gian chạy và ngăn chương trình kết thúc đột ngột. Mọi Exceptions trong Dart là một kiểu con của Exception lớp được xác định trước . Dart cung cấp các kỹ thuật sau để xử lý các case Exceptions.
Các try/on/catch block
Khối try được sử dụng để giữ khối mã có thể được đưa ra một Exceptions. Khối on được sử dụng khi chúng tôi yêu cầu chỉ định các Exceptions. Khối bắt được sử dụng khi trình xử lý cần đối tượng Exceptions.
Nếu khối try tìm thấy lỗi, nó sẽ ném đến khối catch và khối catch có mã để xử lý lỗi. Khối thử phải được theo sau bởi chính xác một khối hoặc trên / bắt hoặc một khối cuối cùng.
Cú pháp của xử lý Exceptions được đưa ra dưới đây.
Cú pháp:
try { // code that might throw an exception } on Exception1 { // Specify the exception } Catch Exception2 { // code for handling exception }
Người ta nên nhớ những điểm sau đây.
- Chúng tôi có thể xử lý nhiều case Exceptions bằng cách sử dụng nhiều hơn một khối bắt.
- Khối on và khối catch bao gồm lẫn nhau, có nghĩa là chúng ta có thể kết hợp cả hai – khối on và khối catch với khối try.
Trong ví dụ sau, biến x được chia tương ứng cho biến y. Mã được ném khi nó cố gắng chia cho số không. Khối on bao gồm mã để xử lý Exceptions. Hãy hiểu đoạn mã sau.
Ví dụ – Sử dụng on block
void main () { int x = 12 ; int y = 0 ; int res; try { res = x ~/ y; } on IntegerDivisionByZeroException { print ( 'Không thể chia cho 0' ); } }
Đầu ra
Không thể chia cho 0
Giải trình:
Trong đoạn mã trên, chúng ta đã khai báo ba biến x, y và res trong hàm main () . Chúng tôi đã viết mã nghi ngờ trong khối try chia x cho 0 có thể được đưa ra một Exceptions. Khối thử đã tìm thấy lỗi mà điều khiển được chuyển đến khối bật có mã để xử lý lỗi. Bằng cách sử dụng điều này, chương trình đã không dừng việc thực thi của nó.
Hãy hiểu ví dụ sau bằng cách sử dụng khối bắt.
Ví dụ – Sử dụng catch Block
void main() { int x = 12; int y = 0; int res; try { res = x ~/ y; } // It returns the built-in exception related to the occurring exception catch(E) { print(E); } }
Ví dụ: on… catch block
void main() { int x = 12; int y = 0; int res; try { res = x ~/ y; } on IntegerDivisionByZeroException catch(E) { print(E); } }
Finally Block
Finally Block luôn thực thi cho dù có Exceptions xảy ra hay không. Nó thực thi vô điều kiện sau khi on/ try/ catch.
Cú pháp của khối cuối cùng được đưa ra dưới đây.
Cú pháp
try { // code that may be throw an exception } on Exception1 { // exception handling code or specifying the exception } catch Exception2 { // code for exception handling } finally { // code that should always execute; whether exception or not. }
Hãy hiểu ví dụ sau về khối cuối cùng.
Ví dụ –
finally { void main() { int x = 12; int y = 0; int res; try { res = x ~/ y; } on IntegerDivisionByZeroException { print('Cannot divide by zero'); } print('Finally block always executed'); } }
Throwing Exceptions
Chúng tôi có thể nêu ra một Exceptions một cách rõ ràng hoặc bắt buộc. Exceptions được nêu rõ ràng nên được xử lý để tránh chương trình tồn tại một cách rõ ràng. Cú pháp được đưa ra dưới đây.
Cú pháp:
throw new Exception_name()
Hãy hiểu ví dụ sau.
Ví dụ –
main() { try { check_marks(-10); } catch(e) { print('The marks cannot be negative'); } } void check_marks(int marks) { if(marks<0) { throw new FormatException(); // Raising explanation externally } }
Các case Exceptions tùy chỉnh
Như chúng ta đã thảo luận ở trên, mỗi Exceptions trong dart là kiểu con của Exception tích hợp sẵn trong lớp . Dart cung cấp sự linh hoạt để tạo Exceptions tùy chỉnh bằng cách mở rộng lớp Exceptions hiện có. Cú pháp được đưa ra dưới đây.
Cú pháp: Xác định Exceptions
class Custom_exception_Name implements Exception { // can contain constructors, variables and methods }
Hãy hiểu đoạn mã sau.
Ví dụ –
class AmtException implements Exception { String expMsg() => 'Entered Amount should be greater than zero'; } void main() { try { withdraw_amt(-1); } catch(E) { print(E.expMsg()); } finally { print('Ending requested operation.....'); } } void withdraw_amt(int amt) { if (amt <= 0) { throw new AmtException(); } }
Giải trình:
Trong ví dụ trên, chúng tôi đã tạo một Exceptions tùy chỉnh, AmtException . Mã đã nêu ra Exceptions nếu số tiền đã nhập không nằm trong phạm vi ngoại trừ và chúng tôi đã đính kèm lệnh gọi hàm trong khối try… catch.