000139. Блочные конструкции. Исключения
Last updated
Last updated
Блочные конструкции. Исключения||wmysterio|wmysterio|wmysterio@yandex.ru|||Всем привет! С Вами 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|16690776png
793275
400138\|35656732
png256
107|13659736png
338`406||blochnye_konstrukcii_iskljuchenija|1392798616