Глава 9. Обработка исключительных ситуаций
197
Листинг 9.1
/* Created by SharpDevelop.
* User: user
* Date: 06.12.2012
* Time: 12:32
*
* To change this template use Tools | Options | Coding |
* Edit Standard Headers. */
using System;
namespace app34_exeption
{
class Program
{
static void Main()
{ Console.WriteLine("Ввод строк длиной " +
"не более 5 символов");
int i = (Console.ReadLine().Length);
try
{
if (i > 5)
// Генерируем исключение
throw new Exception(); // OverflowException();
}
catch (Exception ex) // OverflowException
{
Console.WriteLine("Длина строки более 5 " +
"символов");
}
Console.ReadLine();
}
}
}
Рис. 9.1.
Демонстрация обработки исключения, когда введено более 5 символов
198
Часть II. Объектно-ориентированное программирование
В программе видим два блока обработки исключения, озаглавленных
ключевыми словами
try
и
catch
. Каждый блок — это множество опера-
торов, заключенных в фигурные скобки. Блоки строятся следующим
образом: участок программы, который может стать проблемным, за-
ключается в блок
try
. В нашем случае могут возникнуть проблемы при
вводе строки. Мы хотим ограничить ее длину пятью символами. Заклю-
чаем в блок
try
участок проверки длины введенной строки и не ждем от
исполняющей среды никаких действий по генерации исключения (да
она тут его и не сгенерирует), а сами вставляем в блок
try
оператор
trow
. Синтаксическая конструкция его видна в тексте программы.
Exception()
— это конструктор базового класса по обработке исключе-
ний, который создает из класса объект, элементами которого мы можем
пользоваться (пока что мы не воспользовались ни одним). Ранее отме-
чалось, что для различных конкретных групп ситуаций существуют
свои классы-исключения. В данной ситуации можно было бы восполь-
зоваться классом
OverflowException
, который закомментирован в стро-
ке с оператором
throw
. Этот класс как раз и является разновидностью
классов-исключений, который дает возможность обрабатывать пере-
полнения (в частности, переполнения строк по длине, чем можно было
бы воспользоваться). Но часто достаточно пользоваться самым общим
классом —
Exception
, название которого легко запомнить и который
тоже дает возможность обработки исключений.
У каждого
try
есть пара —
catch
. Тоже блок операторов. В этом блоке
идет собственно обработка ситуации. Если в блоке
try
исключение не
возникло, блок
catch
пропускается (это, как пара
if...else
). Таких пар
может быть сколько угодно: каждый подозрительный участок вы може-
те охватить этой парой. Заголовок блока
catch
— это фактически метод
с одним параметром типа одного из классов-исключений. В данном
случае этот класс тот, который и выдал исключение в операторе
throw
.
Поэтому внутри тела
catch
мы можем пользоваться членами класса
Exception
. Следующая программа, текст которой приведен в листин-
ге 9.2, и демонстрирует этот факт. Результат ее работы представлен на
рис. 9.2.
Листинг 9.2
/* Created by SharpDevelop.
* User: user
* Date: 06.12.2012
* Time: 12:32
*
Do'stlaringiz bilan baham: |