Учебники

9) Обработка исключений VB.Net

Что такое исключение?

Исключение относится к проблеме, которая возникает во время выполнения программы. Это вызвано неожиданным обстоятельством. Хороший пример — когда вы выполняете операцию деления, а затем делите на ноль (0). Исключение будет возбуждено.

В этом руководстве по Visual Basic вы узнаете:

Что такое обработка исключений?

За исключением, вы можете передавать управление программой из одной части в другую. В 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) Нажмите кнопку «Пуск» на панели инструментов, чтобы выполнить код. Вы должны получить следующий вывод:

Вот скриншот кода:

Объяснение кода:

  1. Создание модуля с именем Module1.
  2. Создание подпроцедуры с именем DivisionFunction с двумя целочисленными аргументами n1 и n2. ByVal — это ключевое слово VB.NET, утверждающее, что значения аргументов будут передаваться по значению.
  3. Создание целочисленной переменной с именем answer.
  4. Начало блока Try / Catch. Мы должны окружить код, который, как мы подозреваем, может вызвать исключение в этом блоке.
  5. Выполнение операции деления между значениями переменных n1 и n2. Результат операции деления присваивается переменной ответа. Этот код может вызвать исключение, например, когда мы делим число на ноль, поэтому мы окружили его блоками Try / Catch.
  6. Перехват исключения с именем DivideByZeroException и назначение созданного сообщения об исключении для ex.
  7. Печать некоторого текста на консоли, чтобы уведомить пользователя о типе / имени возникшего исключения.
  8. Последний блок. Это будет выполнено независимо от того, поймано исключение или нет.
  9. Распечатка некоторого текста на консоли, показывающего результат операции деления.
  10. Конец блока Try, то есть конец кода обработки ошибок.
  11. Конец подпроцедуры.
  12. Начало основной подпроцедуры.
  13. Вызов / вызов подпрограммы DivisionFunction. Значения двух целочисленных аргументов передаются здесь. Значение n1 = 4 и n2 = 0. Это означает, что операция деления будет 4 \ 0, то есть n1 \ n2.
  14. Приостановка окна консоли в ожидании действий пользователя по его закрытию.
  15. Конец основной подпроцедуры.
  16. Конец модуля.

Определяемые пользователем исключения

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) Нажмите кнопку «Пуск» в верхней панели, чтобы выполнить код. Вы должны получить следующий вывод:

Вот скриншот кода:

Объяснение кода:

  1. Создание модуля с именем Module1.
  2. Создание класса исключения с именем HeightIsZeroException. Класс наследует весь класс ApplicationException.
  3. Создание подпроцедуры с именем New. Это займет один строковый аргумент с именем text.
  4. Вызов конструктора базового класса и передача ему вышеуказанного аргумента.
  5. Конец Новой подпроцедуры.
  6. Конец класса HeightIsZeroException.
  7. Создание класса с именем Высота. Его модификатор публичного доступа — Public, означающий, что он будет общедоступным.
  8. Создание целочисленной переменной с именем Height и инициализация ее значения 0.
  9. Создание подпроцедуры с именем showHeight ().
  10. Проверка, когда значение переменной Height равно 0. Мы использовали условие If… Then.
  11. Бросить исключение HeightIsZeroException, если указанное выше условие истинно. Сообщение «Найдена нулевая высота» будет отображаться при выдаче этого исключения.
  12. Другая часть, которая будет выполнена, если условие If не выполнено.
  13. Сообщение для печати на консоли с указанием высоты, когда она не равна 0.
  14. Конец условия If.
  15. Конец подпроцедуры showHeight ().
  16. Конец класса Высота.
  17. Начало основной подпроцедуры.
  18. Создание объекта с именем Высота в качестве экземпляра класса Высота.
  19. Начало блока обработки исключений.
  20. Вызов подпрограммы showHeight (), определенной в классе Height. Мы использовали объект этого класса для доступа к этому методу. Эта строка может привести к исключению. Поэтому мы окружили его кодом обработки исключений.
  21. Перехват исключительной ситуации HeightIsZeroException в качестве объекта ex в случае его возникновения.
  22. Сообщение для печати на консоли, когда перехватывается высотаIsZeroException.
  23. Конец блока обработки исключений.
  24. Приостановите окно консоли, ожидая действий пользователя, чтобы закрыть его.
  25. Конец основной подпроцедуры.
  26. Конец модуля.

Бросать предметы

В обработке исключений, вы можете выбрать бросить объект. Однако объект должен быть производным от 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) Нажмите кнопку «Пуск» в верхней панели, чтобы выполнить код. Вы должны получить следующее:

Вот скриншот кода:

Объяснение кода:

  1. Создание модуля с именем Module1.
  2. Начало основной подпроцедуры.
  3. Начало кода обработки ошибок.
  4. Бросать объект исключения. Этот код может генерировать исключение, поэтому мы окружили его блоком Try / Catch.
  5. Перехват исключения как объекта ex, если строка вызывает исключение.
  6. Печать сообщения об исключении на консоли в случае его возникновения.
  7. Блок finally для запуска независимо от того, поймано ли исключение или нет.
  8. Сообщение для печати на консоли при выполнении блока Наконец.
  9. Конец кода обработки исключений.
  10. Задержите консоль на некоторое время, ожидая действий пользователя, чтобы закрыть ее.
  11. Конец основной подпроцедуры.
  12. Конец модуля.

Резюме

  • Исключение относится к проблеме, которая возникает во время выполнения программы, вызванной непредвиденными обстоятельствами.
  • Если вы подозреваете, что какой-то код сгенерирует исключение, окружите его блоком Try / Catch.
  • Блок Наконец идет после блока Try / Catch и выполняется независимо от того, перехвачено исключение или нет.
  • VB.NET позволяет нам создавать собственные исключения.