Что такое исключение?
Исключение относится к проблеме, которая возникает во время выполнения программы. Это вызвано неожиданным обстоятельством. Хороший пример — когда вы выполняете операцию деления, а затем делите на ноль (0). Исключение будет возбуждено.
В этом руководстве по Visual Basic вы узнаете:
- Что такое исключение?
- Что такое обработка исключений?
- Синтаксис Try / Catch
- Пример для обработки исключений
- Определяемые пользователем исключения
- Бросать предметы
Что такое обработка исключений?
За исключением, вы можете передавать управление программой из одной части в другую. В VB.NET исключения обрабатываются с использованием следующих 4 ключевых слов:
Ключевое слово | подробность |
Пытаться | Работа блока Try заключается в определении блока кода, для которого будет активировано конкретное исключение. За ним должен следовать блок (и) захвата. |
Поймать | В этом блоке производится отлов исключения. Это обработчик исключений, в котором обрабатывается исключение. |
в заключение | Используйте блок Наконец для запуска набора операторов независимо от того, произошло исключение или нет. |
бросать | Исключение выдается после возникновения проблемы. Это работа ключевого слова 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 и Наконец.
Шаг 1) Создайте новое консольное приложение.
Шаг 2) Используйте этот код:
Module Module1 Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer) Dim answer As Integer Try answer = n1 \ n2 Catch ex As DivideByZeroException Console.WriteLine("Exception: {0}", ex) Finally Console.WriteLine("Answer is: {0}", answer) End Try End Sub Sub Main() divisionFunction(4, 0) Console.ReadKey() End Sub End Module
Шаг 3) Нажмите кнопку «Пуск» на панели инструментов, чтобы выполнить код. Вы должны получить следующий вывод:
Вот скриншот кода:
Объяснение кода:
- Создание модуля с именем Module1.
- Создание подпроцедуры с именем DivisionFunction с двумя целочисленными аргументами n1 и n2. ByVal — это ключевое слово VB.NET, утверждающее, что значения аргументов будут передаваться по значению.
- Создание целочисленной переменной с именем answer.
- Начало блока Try / Catch. Мы должны окружить код, который, как мы подозреваем, может вызвать исключение в этом блоке.
- Выполнение операции деления между значениями переменных n1 и n2. Результат операции деления присваивается переменной ответа. Этот код может вызвать исключение, например, когда мы делим число на ноль, поэтому мы окружили его блоками Try / Catch.
- Перехват исключения с именем DivideByZeroException и назначение созданного сообщения об исключении для ex.
- Печать некоторого текста на консоли, чтобы уведомить пользователя о типе / имени возникшего исключения.
- Последний блок. Это будет выполнено независимо от того, поймано исключение или нет.
- Распечатка некоторого текста на консоли, показывающего результат операции деления.
- Конец блока Try, то есть конец кода обработки ошибок.
- Конец подпроцедуры.
- Начало основной подпроцедуры.
- Вызов / вызов подпрограммы DivisionFunction. Значения двух целочисленных аргументов передаются здесь. Значение n1 = 4 и n2 = 0. Это означает, что операция деления будет 4 \ 0, то есть n1 \ n2.
- Приостановка окна консоли в ожидании действий пользователя по его закрытию.
- Конец основной подпроцедуры.
- Конец модуля.
Определяемые пользователем исключения
VB.NET позволяет вам определять ваши собственные исключения. Вы можете получить пользовательские классы исключений из класса ApplicationException. Давайте продемонстрируем это на примере:
Шаг 1) Создайте новое консольное приложение.
Шаг 2) Используйте следующий код:
Module Module1 Public Class HeightIsZeroException : Inherits ApplicationException Public Sub New(ByVal text As String) MyBase.New(text) End Sub End Class Public Class Height Dim height As Integer = 0 Sub showHeight() If (height = 0) Then Throw (New HeightIsZeroException("Zero Height found")) Else Console.WriteLine("Height is: {0}", height) End If End Sub End Class Sub Main() Dim hght As Height = New Height() Try hght.showHeight() Catch ex As HeightIsZeroException Console.WriteLine("HeightIsZeroException: {0}", ex.Message) End Try Console.ReadKey() End Sub End Module
Шаг 3) Нажмите кнопку «Пуск» в верхней панели, чтобы выполнить код. Вы должны получить следующий вывод:
Вот скриншот кода:
Объяснение кода:
- Создание модуля с именем Module1.
- Создание класса исключения с именем HeightIsZeroException. Класс наследует весь класс ApplicationException.
- Создание подпроцедуры с именем New. Это займет один строковый аргумент с именем text.
- Вызов конструктора базового класса и передача ему вышеуказанного аргумента.
- Конец Новой подпроцедуры.
- Конец класса HeightIsZeroException.
- Создание класса с именем Высота. Его модификатор публичного доступа — Public, означающий, что он будет общедоступным.
- Создание целочисленной переменной с именем Height и инициализация ее значения 0.
- Создание подпроцедуры с именем showHeight ().
- Проверка, когда значение переменной Height равно 0. Мы использовали условие If… Then.
- Бросить исключение HeightIsZeroException, если указанное выше условие истинно. Сообщение «Найдена нулевая высота» будет отображаться при выдаче этого исключения.
- Другая часть, которая будет выполнена, если условие If не выполнено.
- Сообщение для печати на консоли с указанием высоты, когда она не равна 0.
- Конец условия If.
- Конец подпроцедуры showHeight ().
- Конец класса Высота.
- Начало основной подпроцедуры.
- Создание объекта с именем Высота в качестве экземпляра класса Высота.
- Начало блока обработки исключений.
- Вызов подпрограммы showHeight (), определенной в классе Height. Мы использовали объект этого класса для доступа к этому методу. Эта строка может привести к исключению. Поэтому мы окружили его кодом обработки исключений.
- Перехват исключительной ситуации HeightIsZeroException в качестве объекта ex в случае его возникновения.
- Сообщение для печати на консоли, когда перехватывается высотаIsZeroException.
- Конец блока обработки исключений.
- Приостановите окно консоли, ожидая действий пользователя, чтобы закрыть его.
- Конец основной подпроцедуры.
- Конец модуля.
Бросать предметы
В обработке исключений, вы можете выбрать бросить объект. Однако объект должен быть производным от System. Исключительный класс, прямо или косвенно. Например:
Шаг 1) Создайте новое консольное приложение.
Шаг 2) Используйте следующий код:
Module Module1 Sub Main() Try Throw New ApplicationException("Throwing a custom exception") Catch ex As Exception Console.WriteLine(ex.Message) Finally Console.WriteLine("The Finally Block") End Try Console.ReadKey() End Sub End Module
Шаг 3) Нажмите кнопку «Пуск» в верхней панели, чтобы выполнить код. Вы должны получить следующее:
Вот скриншот кода:
Объяснение кода:
- Создание модуля с именем Module1.
- Начало основной подпроцедуры.
- Начало кода обработки ошибок.
- Бросать объект исключения. Этот код может генерировать исключение, поэтому мы окружили его блоком Try / Catch.
- Перехват исключения как объекта ex, если строка вызывает исключение.
- Печать сообщения об исключении на консоли в случае его возникновения.
- Блок finally для запуска независимо от того, поймано ли исключение или нет.
- Сообщение для печати на консоли при выполнении блока Наконец.
- Конец кода обработки исключений.
- Задержите консоль на некоторое время, ожидая действий пользователя, чтобы закрыть ее.
- Конец основной подпроцедуры.
- Конец модуля.
Резюме
- Исключение относится к проблеме, которая возникает во время выполнения программы, вызванной непредвиденными обстоятельствами.
- Если вы подозреваете, что какой-то код сгенерирует исключение, окружите его блоком Try / Catch.
- Блок Наконец идет после блока Try / Catch и выполняется независимо от того, перехвачено исключение или нет.
- VB.NET позволяет нам создавать собственные исключения.