Программирование дротиков - исключения
Исключение (или исключительное событие) - это проблема, возникающая во время выполнения программы. Когда возникает исключение, нормальный поток программы прерывается, и программа / приложение завершается ненормально.
Встроенные исключения Dart включают:
Старший Нет | Исключения и описание |
---|---|
1 | DeferredLoadException Вызывается, когда не загружается отложенная библиотека. |
2 | FormatException Исключение возникает, когда строка или некоторые другие данные не имеют ожидаемого формата и не могут быть проанализированы или обработаны. |
3 | IntegerDivisionByZeroException Выбрасывается, когда число делится на ноль. |
4 | IOException Базовый класс для всех исключений, связанных с Inupt-Output. |
5 | IsolateSpawnException Выбрасывается, когда невозможно создать изолятор. |
6 | Timeout Вызывается, когда истекает запланированный тайм-аут при ожидании результата асинхронности. |
Каждое исключение в Dart - это подтип предопределенного класса Exception. Чтобы предотвратить внезапное завершение работы приложения, необходимо обрабатывать исключения.
Блоки try / on / catch
В tryblock встраивает код, который может привести к исключению. Блок on используется, когда необходимо указать тип исключения. Вcatch блок используется, когда обработчику нужен объект исключения.
В try за блоком должен следовать ровно один on / catch блок или один finallyблок (или один из обоих). Когда в блоке try возникает исключение, управление передается вcatch.
В syntax для обработки исключения, как указано ниже -
try {
// code that might throw an exception
}
on Exception1 {
// code for handling exception
}
catch Exception2 {
// code for handling exception
}
Ниже приведены некоторые моменты, которые следует запомнить:
Фрагмент кода может иметь более одного блока on / catch для обработки нескольких исключений.
Блок включения и блок catch взаимно включаются, т. Е. Блок try может быть связан как с блоком включения, так и блоком catch.
Следующий код иллюстрирует обработку исключений в Dart -
Пример: использование блока ON
Следующая программа делит два числа, представленных переменными x и yсоответственно. Код вызывает исключение, поскольку пытается делить на ноль. Вon block содержит код для обработки этого исключения.
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
on IntegerDivisionByZeroException {
print('Cannot divide by zero');
}
}
Должно получиться следующее output -
Cannot divide by zero
Пример: использование блока catch
В следующем примере мы использовали тот же код, что и выше. Единственная разница в том, чтоcatch block(вместо блока ON) здесь содержится код для обработки исключения. Параметрcatch содержит объект исключения, созданный во время выполнения.
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
catch(e) {
print(e);
}
}
Должно получиться следующее output -
IntegerDivisionByZeroException
Пример: on… catch
В следующем примере показано, как использовать on...catch блок.
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
on IntegerDivisionByZeroException catch(e) {
print(e);
}
}
Должно получиться следующее output -
IntegerDivisionByZeroException
Последний блок
В finallyblock включает код, который должен выполняться независимо от возникновения исключения. Необязательныйfinally блок выполняется безоговорочно после try/on/catch.
Синтаксис для использования finally блок выглядит следующим образом -
try {
// code that might throw an exception
}
on Exception1 {
// exception handling code
}
catch Exception2 {
// exception handling
}
finally {
// code that should always execute; irrespective of the exception
}
Следующий пример иллюстрирует использование finally блок.
main() {
int x = 12;
int y = 0;
int res;
try {
res = x ~/ y;
}
on IntegerDivisionByZeroException {
print('Cannot divide by zero');
}
finally {
print('Finally block executed');
}
}
Должно получиться следующее output -
Cannot divide by zero
Finally block executed
Выброс исключения
В throwключевое слово используется для явного вызова исключения. Возникшее исключение следует обработать, чтобы предотвратить внезапный выход из программы.
В syntax для явного создания исключения -
throw new Exception_name()
пример
В следующем примере показано, как использовать throw ключевое слово для исключения исключения -
main() {
try {
test_age(-2);
}
catch(e) {
print('Age cannot be negative');
}
}
void test_age(int age) {
if(age<0) {
throw new FormatException();
}
}
Должно получиться следующее output -
Age cannot be negative
Пользовательские исключения
Как указано выше, каждый тип исключения в Dart является подтипом встроенного класса. Exception. Dart позволяет создавать собственные исключения, расширяя существующие. Синтаксис для определения настраиваемого исключения приведен ниже -
Синтаксис: определение исключения
class Custom_exception_Name implements Exception {
// can contain constructors, variables and methods
}
Пользовательские исключения следует вызывать явно, и то же самое следует обрабатывать в коде.
пример
В следующем примере показано, как определить и обработать настраиваемое исключение.
class AmtException implements Exception {
String errMsg() => 'Amount should be greater than zero';
}
void main() {
try {
withdraw_amt(-1);
}
catch(e) {
print(e.errMsg());
}
finally {
print('Ending requested operation.....');
}
}
void withdraw_amt(int amt) {
if (amt <= 0) {
throw new AmtException();
}
}
В приведенном выше коде мы определяем настраиваемое исключение, AmtException. Код вызывает исключение, если переданная сумма не находится в пределах исключенного диапазона. Вmain функция включает вызов функции в try...catch блок.
Код должен выдать следующее output -
Amount should be greater than zero
Ending requested operation....