Что такое исключение?
Исключение относится к проблеме, возникающей во время выполнения программы. Это вызвано неожиданным обстоятельством. Хороший пример - когда вы выполняете операцию деления, а затем делите на ноль (0). Возникнет исключение.
В этом руководстве по Visual Basic вы узнаете:
- Что такое исключение?
- Что такое обработка исключений?
- Синтаксис Try / Catch
- Пример обработки исключений
- Пользовательские исключения
- Бросание предметов
Что такое обработка исключений?
За исключением случаев, вы можете передавать управление программой от одной части к другой. В VB.NET исключения обрабатываются с помощью следующих 4 ключевых слов:
Ключевое слово | Деталь |
Пытаться | Работа блока Try состоит в том, чтобы идентифицировать блок кода, для которого будет активировано конкретное исключение. За ним должны следовать блок (ы) захвата. |
Ловить | В этом блоке осуществляется перехват исключения. Это обработчик исключений, в котором обрабатывается исключение. |
Ну наконец то | Используйте блок finally, чтобы запустить набор операторов независимо от того, произошло ли исключение или нет. |
Бросать | Исключение создается после возникновения проблемы. Это работа ключевого слова Throw. |
Синтаксис Try / Catch
Операторы Try / Catch используют приведенный ниже синтаксис:
Try[ try_Statement(s) ][ Exit Try ][ Catch [ exception_name [ As type ] ] [ When expression ][ catch_Statement(s) ][ Exit Try ] ][ Catch… ][ Finally[ finally_Statement(s) ] ]End Try
Блок Try / Catch должен окружать код, который может вызвать исключение. Этот код известен как защищенный код. Вы можете использовать несколько операторов catch, когда вам нужно перехватить различные типы исключений.
Пример обработки исключений
С помощью операторов Try / Catch вы можете отделить обычный программный код от системы обработки ошибок. Давайте продемонстрируем, как обрабатывать исключение, используя ключевые слова Try, Catch и finally.
Шаг 1) Создайте новое консольное приложение.
Шаг 2) Используйте этот код:
Module Module1Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer)Dim answer As IntegerTryanswer = n1 \ n2Catch ex As DivideByZeroExceptionConsole.WriteLine("Exception: {0}", ex)FinallyConsole.WriteLine("Answer is: {0}", answer)End TryEnd SubSub Main()divisionFunction(4, 0)Console.ReadKey()End SubEnd Module
Шаг 3) Нажмите кнопку «Пуск» на панели инструментов, чтобы выполнить код. Вы должны получить следующий результат:
Вот скриншот кода:
Пояснение к коду:
- Создание модуля с именем Module1.
- Создание подпроцедуры с именем DivisionFunction с двумя целочисленными аргументами n1 и n2. ByVal - это ключевое слово VB.NET, указывающее, что значения аргументов будут передаваться по значению.
- Создание целочисленной переменной с именем answer.
- Начало блока Try / Catch. Нам нужно окружить код, который, как мы подозреваем, может вызвать исключение, этим блоком.
- Выполнение операции деления между значениями переменных n1 и n2. Результат операции деления присваивается вариативному ответу. Этот код может вызвать исключение, например, когда мы делим число на ноль, поэтому мы окружили его блоками Try / Catch.
- Перехват исключения с именем DivideByZeroException и присвоение сгенерированного сообщения об исключении объекту ex.
- Печать некоторого текста на консоли, чтобы уведомить пользователя о типе / имени возникшего исключения.
- Блок «Наконец». Это будет выполняться независимо от того, обнаружено исключение или нет.
- Печать текста на консоли, показывающего результат операции разделения.
- Конец блока Try, то есть конец кода обработки ошибок.
- Конец подпроцедуры DivisionFunction.
- Начало основной подпроцедуры.
- Вызов / вызов подпроцедуры DivisionFunction. Здесь передаются значения двух целочисленных аргументов. Значение n1 = 4 и n2 = 0. Это означает, что операция деления будет 4 \ 0, то есть n1 \ n2.
- Приостановка окна консоли в ожидании действия пользователя по его закрытию.
- Конец основной подпроцедуры.
- Конец модуля.
Пользовательские исключения
VB.NET позволяет определять собственные исключения. Вы можете получить определяемые пользователем классы исключений из класса ApplicationException. Продемонстрируем это на примере:
Шаг 1) Создайте новое консольное приложение.
Шаг 2) Используйте следующий код:
Module Module1Public Class HeightIsZeroException : Inherits ApplicationExceptionPublic Sub New(ByVal text As String)MyBase.New(text)End SubEnd ClassPublic Class HeightDim height As Integer = 0Sub showHeight()If (height = 0) ThenThrow (New HeightIsZeroException("Zero Height found"))ElseConsole.WriteLine("Height is: {0}", height)End IfEnd SubEnd ClassSub Main()Dim hght As Height = New Height()Tryhght.showHeight()Catch ex As HeightIsZeroExceptionConsole.WriteLine("HeightIsZeroException: {0}", ex.Message)End TryConsole.ReadKey()End SubEnd Module
Шаг 3) Нажмите кнопку «Пуск» на верхней панели, чтобы выполнить код. Вы должны получить следующий результат:
Вот скриншот кода:
Пояснение к коду:
- Создание модуля с именем Module1.
- Создание класса исключения с именем HeightIsZeroException. Класс наследует весь класс ApplicationException.
- Создание подпроцедуры с именем New. Потребуется один строковый аргумент с именем text.
- Вызов конструктора базового класса и передача ему указанного выше аргумента.
- Конец новой подпроцедуры.
- Конец класса HeightIsZeroException.
- Создание класса с именем Высота. Его модификатор публичного доступа - Public, что означает, что он будет общедоступным.
- Создание целочисленной переменной с именем Высота и инициализация ее значения 0.
- Создание подпроцедуры с именем showHeight ().
- Проверка, когда значение переменной Height равно 0. Мы использовали условие If… Then.
- Выбрасывать исключение HeightIsZeroException, если вышеупомянутое условие истинно. Сообщение "Обнаружена нулевая высота" будет отображаться при возникновении этого исключения.
- Часть Else должна выполняться, когда условие If не выполняется.
- Сообщение для печати на консоли, показывающее высоту, если она не равна 0.
- Конец условия If.
- Конец подпроцедуры showHeight ().
- Конец класса Высота.
- Начало основной подпроцедуры.
- Создание объекта с именем «Высота» в качестве экземпляра класса «Высота».
- Начало блока обработки исключений.
- Вызов подпроцедуры showHeight (), определенной в классе Height. Мы использовали объект этого класса для доступа к этому методу. Эта строка может привести к исключению. Поэтому мы окружили его кодом обработки исключений.
- Перехват исключения HeightIsZeroException как объекта ex в случае его возникновения.
- Сообщение для печати на консоли при обнаружении исключения HeightIsZeroException.
- Конец блока обработки исключений.
- Приостановите окно консоли, ожидая, пока пользователь предпримет действия по его закрытию.
- Конец основной подпроцедуры.
- Конец модуля.
Бросание предметов
При обработке исключений вы можете выбросить объект. Однако объект должен быть производным от System. Exceptionclass, прямо или косвенно. Например:
Шаг 1) Создайте новое консольное приложение.
Шаг 2) Используйте следующий код:
Module Module1Sub Main()TryThrow New ApplicationException("Throwing a custom exception")Catch ex As ExceptionConsole.WriteLine(ex.Message)FinallyConsole.WriteLine("The Finally Block")End TryConsole.ReadKey()End SubEnd Module
Шаг 3) Нажмите кнопку «Пуск» на верхней панели, чтобы выполнить код. У вас должно получиться следующее:
Вот скриншот кода:
Пояснение к коду:
- Создание модуля с именем Module1.
- Начало основной подпроцедуры.
- Начало кода обработки ошибок.
- Выбрасывание объекта исключения. Этот код может генерировать исключение, поэтому мы окружили его блоком Try / Catch.
- Перехват исключения как объекта ex, если строка вызывает исключение.
- Печать сообщения об исключении на консоли в случае его возникновения.
- Блок finally для запуска вне зависимости от того, обнаружено ли исключение или нет.
- Сообщение для печати на консоли при выполнении блока finally.
- Конец кода обработки исключений.
- Приостановите консоль на некоторое время, ожидая, пока пользователь закроет ее.
- Конец основной подпроцедуры.
- Конец модуля.
Резюме
- Исключение относится к проблеме, которая возникает во время выполнения программы из-за непредвиденных обстоятельств.
- Если вы подозреваете, что какой-то код вызовет исключение, заключите его в блок Try / Catch.
- Блок finally идет после блока Try / Catch и выполняется независимо от того, было обнаружено исключение или нет.
- VB.NET позволяет нам создавать собственные исключения.