000139. Блочные конструкции. Исключения
Блочные конструкции. Исключения||wmysterio|wmysterio|[email protected]|||Всем привет! С Вами wmysterio. В этом уроке мы поговорим об ещё одной блочной конструкции - операторах исключения. В этой конструкции идёт попытка выполнения некого кода, и если этот код имеет логическую ошибку, то будет выполнятся другой код. Общая конструкция выглядит следующим образом:
try {
// В начале идёт попытка выполнить этот код
} catch {
// Если попытка не удалась, то обрабатываем исключение в этом коде
}
|
В качестве примера, давайте напишем код, где явно можно получить ошибку - деление на ноль. Давайте создадим статическую функцию деления и коде программы укажем параметр ноль.
class Program {
static void Main() {
int a = 5;
int c = del(a, 0);
Console.ReadKey();
}
public static int del( int start, int val ) {
return start /= val;
}
}
|
После запуска мы получим окно о ошибке:
Если запустить готовый exe-шник, то программа в лучшем случаи завершится с ошибкой. Как вы уже догадались, чтобы избежать подобной ошибки требуется написать обработчик исключения под данную ошибку. Для этого и существует блок ПОПЫТКА .. ИСКЛЮЧЕНИЕ(try .. catch), который мы сейчас внедрим в нашу программу:

public static int del( int start, int val ) {
try {
return start /= val;
} catch {
Console.WriteLine("Невозможно делить на ноль!");
return -1;
}
}
|
После запуска программы, мы увидим в окне следующее:
И программа работает адекватно без вылетов и конструктивно объяснили пользователю причину остановки программы.
Давайте переделаем код, чтобы пользователь вводил 2 числа с клавиатуры и нам выводилась их сумма. В предыдущих уроках мы делали подобный пример, теперь пора добавить обработчик исключения! Создадим процедуру, которая выведет на экран сумму:

public static void del( string Va1, string Va2 ) {
try {
int a = int.Parse( Va1 );
int b = int.Parse( Va2 );
Console.WriteLine("{0}", a /= b);
} catch {
Console.WriteLine("Невозможно выполнить данное действие!");
}
}
|
и саму программу:
static void Main() {
Console.WriteLine( "Введите 2 числа, которых нужно сложить:" );
del( Console.ReadLine(), Console.ReadLine() );
Console.ReadKey();
}
|
Тестируем нашу программу:
Отсюда можно сделать вывод: Если возникает хотя-бы одна ошибка в блоке try, будет выполнены команды в catch. Это обезопасит программу от невнимательности пользователя и от "форс-мажор"-а. Есть так-же необязательный оператор finally, который связан с блоком попытки. там вы полняются команды, которые выполняются сразу-же после обработки исключений. В наше примере можно переработать процедуру вот так:

try {
int a = int.Parse( Va1 );
int b = int.Parse( Va2 );
Console.WriteLine( "{0}", a /= b );
} catch {
Console.WriteLine( "Невозможно выполнить данное действие!" );
} finally {
Console.ReadKey();
}
|
А наш код будет выглядеть следующим образом:Кодusing System;
namespace Consol {
class Program {
static void Main() {
Console.WriteLine( "Введите 2 числа, которых нужно сложить:" );
del( Console.ReadLine(), Console.ReadLine() );
}
public static void del( string Va1, string Va2 ) {
try {
int a = int.Parse( Va1 );
int b = int.Parse( Va2 );
Console.WriteLine( "{0}", a /= b );
} catch {
Console.WriteLine( "Невозможно выполнить данное действие!" );
} finally {
Console.ReadKey();
}
}
}
}Что-же, надеюсь вы поймёте для чего нужно обрабатывать исключения
|732|1|0|16690776

png
793275
400138\|35656732
png256
107|13659736png
338`406||blochnye_konstrukcii_iskljuchenija|1392798616Last modified 1yr ago