Исключением является проблема, возникающая при выполнении программы. Исключением является ответ на исключительное обстоятельство, которое возникает во время работы программы, например, попытка деления на ноль.
Исключения предоставляют способ передачи управления из одной части программы в другую. Обработка исключений в VB.Net основана на четырех ключевых словах — Try , Catch , Наконец и Throw .
-
Try — блок Try определяет блок кода, для которого будут активированы определенные исключения. За ним следует один или несколько блоков Catch.
-
Поймать — программа ловит исключение с помощью обработчика исключений в том месте программы, где вы хотите решить проблему. Ключевое слово Catch указывает на перехват исключения.
-
Наконец, — блок «Последний» используется для выполнения заданного набора операторов независимо от того, было ли выброшено исключение или нет. Например, если вы открываете файл, он должен быть закрыт независимо от того, возбуждено ли исключение или нет.
-
Бросок — программа выдает исключение при обнаружении проблемы. Это делается с помощью ключевого слова Throw.
Try — блок Try определяет блок кода, для которого будут активированы определенные исключения. За ним следует один или несколько блоков Catch.
Поймать — программа ловит исключение с помощью обработчика исключений в том месте программы, где вы хотите решить проблему. Ключевое слово Catch указывает на перехват исключения.
Наконец, — блок «Последний» используется для выполнения заданного набора операторов независимо от того, было ли выброшено исключение или нет. Например, если вы открываете файл, он должен быть закрыт независимо от того, возбуждено ли исключение или нет.
Бросок — программа выдает исключение при обнаружении проблемы. Это делается с помощью ключевого слова Throw.
Синтаксис
Предполагая, что блок вызовет исключение, метод перехватывает исключение, используя комбинацию ключевых слов Try и Catch. Блок Try / Catch размещается вокруг кода, который может генерировать исключение. Код в блоке Try / Catch называется защищенным кодом, и синтаксис использования Try / Catch выглядит следующим образом:
Try [ tryStatements ] [ Exit Try ] [ Catch [ exception [ As type ] ] [ When expression ] [ catchStatements ] [ Exit Try ] ] [ Catch ... ] [ Finally [ finallyStatements ] ] End Try
Вы можете перечислить несколько операторов catch для перехвата различных типов исключений в случае, если ваш блок try вызывает более одного исключения в разных ситуациях.
Классы исключений в .Net Framework
В .Net Framework исключения представлены классами. Классы исключений в .Net Framework в основном прямо или косвенно являются производными от класса System.Exception . Некоторыми из классов исключений, полученных из класса System.Exception, являются классы System.ApplicationException и System.SystemException .
Класс System.ApplicationException поддерживает исключения, генерируемые прикладными программами. Таким образом, исключения, определенные программистами, должны быть производными от этого класса.
Класс System.SystemException является базовым классом для всех предопределенных системных исключений.
В следующей таблице представлены некоторые предопределенные классы исключений, полученные из класса Sytem.SystemException.
Исключительный класс | Описание |
---|---|
System.IO.IOException | Обрабатывает ошибки ввода / вывода. |
System.IndexOutOfRangeException | Обрабатывает ошибки, сгенерированные, когда метод ссылается на индекс массива вне диапазона. |
System.ArrayTypeMismatchException | Обрабатывает ошибки, возникающие, когда тип не соответствует типу массива. |
System.NullReferenceException | Обрабатывает ошибки, сгенерированные в результате определения нулевого объекта. |
System.DivideByZeroException | Обрабатывает ошибки, возникающие при делении дивиденда на ноль. |
System.InvalidCastException | Обрабатывает ошибки, сгенерированные во время приведения типов. |
System.OutOfMemoryException | Обрабатывает ошибки, возникающие из-за недостатка свободной памяти. |
System.StackOverflowException | Обрабатывает ошибки, вызванные переполнением стека. |
Обработка исключений
VB.Net предоставляет структурированное решение проблем обработки исключений в виде блоков try и catch. Используя эти блоки, основные программные операторы отделены от операторов обработки ошибок.
Эти блоки обработки ошибок реализованы с использованием ключевых слов Try , Catch и finally. Ниже приведен пример создания исключения при делении на ноль:
Module exceptionProg Sub division(ByVal num1 As Integer, ByVal num2 As Integer) Dim result As Integer Try result = num1 \ num2 Catch e As DivideByZeroException Console.WriteLine("Exception caught: {0}", e) Finally Console.WriteLine("Result: {0}", result) End Try End Sub Sub Main() division(25, 0) Console.ReadKey() End Sub End Module
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ... Result: 0
Создание пользовательских исключений
Вы также можете определить свое собственное исключение. Определяемые пользователем классы исключений являются производными от класса ApplicationException . Следующий пример демонстрирует это —
Module exceptionProg Public Class TempIsZeroException : Inherits ApplicationException Public Sub New(ByVal message As String) MyBase.New(message) End Sub End Class Public Class Temperature Dim temperature As Integer = 0 Sub showTemp() If (temperature = 0) Then Throw (New TempIsZeroException("Zero Temperature found")) Else Console.WriteLine("Temperature: {0}", temperature) End If End Sub End Class Sub Main() Dim temp As Temperature = New Temperature() Try temp.showTemp() Catch e As TempIsZeroException Console.WriteLine("TempIsZeroException: {0}", e.Message) End Try Console.ReadKey() End Sub End Module
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
TempIsZeroException: Zero Temperature found
Бросать предметы
Вы можете выбросить объект, если он прямо или косвенно является производным от класса System.Exception.
Вы можете использовать оператор throw в блоке catch, чтобы выбросить текущий объект как —
Throw [ expression ]
Следующая программа демонстрирует это —
Module exceptionProg Sub Main() Try Throw New ApplicationException("A custom exception _ is being thrown here...") Catch e As Exception Console.WriteLine(e.Message) Finally Console.WriteLine("Now inside the Finally Block") End Try Console.ReadKey() End Sub End Module
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —