Обробка винятків у VB.Net: приклади обробки Try & Catch
Що таке виняток у VB.Net?
An Виняток у VB.Net відноситься до проблеми, яка виникає під час виконання програми. Це викликано несподіваною обставиною. Хороший приклад: ви виконуєте операцію ділення, а потім ділите на нуль (0). Буде створено виняток.
Що таке обробка винятків у VB.Net?
З винятками в VB.Net, ви можете передавати керування програмою від однієї частини до іншої. У VB.Net винятки обробляються за допомогою таких 4 ключових слів:
ключове слово | деталь |
---|---|
пробувати | Робота блоку Try полягає у визначенні блоку коду, для якого буде активовано певний виняток. За ним має слідувати блок(и) catch. |
Залучайте | Перехоплення винятків виконується в цьому блоці. Це обробник винятків, у якому обробляється виняткова ситуація. |
в кінці кінців | Використовуйте блок Finally, щоб запустити набір інструкцій незалежно від того, сталася виняток чи ні. |
Кидати | Виняток створюється після виникнення проблеми. Це робота ключового слова Throw. |
Синтаксис Try Catch у VB.Net
Інструкції Try Catch у VB.Net визначаються за допомогою наведеного нижче синтаксису:
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, коли вам потрібно перехопити різні типи винятків.
Приклад обробки винятків у VB.Net із Try Catch і Finally
За допомогою операторів Try/Catch ви можете відокремити звичайний програмний код від системи обробки помилок. Давайте продемонструємо, як обробляти виняток за допомогою ключових слів Try, Catch і Finally.
Крок 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.
- Друк певного тексту на консолі, щоб повідомити користувача про тип/ім’я викликаного винятку.
- Блок Finally. Це буде виконано незалежно від того, чи буде перехоплено виняток, чи ні.
- Друк тексту на консолі, що показує результат операції ділення.
- Кінець блоку Try, тобто кінець коду обробки помилок.
- Кінець підпроцедури divisionFunction.
- Початок основної підпроцедури.
- Виклик/запуск підпроцедури divisionFunction. Тут передаються значення двох цілих аргументів. Значення n1=4 і n2=0. Це означає, що операція ділення буде 4\0, тобто n1\n2.
- Призупинення вікна консолі в очікуванні дії користувача, щоб закрити його.
- Кінець основної підпроцедури.
- Кінець модуля.
Винятки, визначені користувачем у VB.Net
VB.Net дозволяє вам визначати власні винятки. Ви можете отримати визначені користувачем класи винятків із класу ApplicationException. Продемонструємо це на прикладі:
Приклад визначеного користувачем винятку у VB.Net
Ось приклад визначеного користувачем винятку у VB.Net:
Крок 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.
- Створення класу під назвою Height. Його модифікатор публічного доступу – Public, що означає, що він буде загальнодоступним.
- Створення цілочисельної змінної з іменем Height та ініціалізація її значення 0.
- Створення підпроцедури під назвою showHeight().
- Перевірка, коли значення змінної Height дорівнює 0. Ми використали умову If…Then.
- Щоб створити виняток HeightIsZeroException, якщо наведена вище умова виконується. Повідомлення Zero Height Found (Знайдено нульову висоту) буде показано, коли буде створено цей виняток.
- Частина Else, яка виконується, коли умова If не виконується.
- Повідомлення для друку на консолі, яке показує висоту, якщо вона не дорівнює 0.
- Кінець умови If.
- Кінець підпроцедури showHeight().
- Кінець класу Висота.
- Початок основної підпроцедури.
- Створення об’єкта з іменем Height як екземпляра класу Height.
- Початок блоку обробки винятків.
- Виклик підпроцедури showHeight(), визначеної в класі Height. Ми використали об’єкт цього класу для доступу до цього методу. Цей рядок може призвести до винятку. Тому ми оточили його кодом обробки винятків.
- Перехоплення винятку HeightIsZeroException як об’єкта ex на випадок його виникнення.
- Повідомлення для друку на консолі, коли виявляється HeightIsZeroException.
- Кінець блоку обробки винятків.
- Призупинити вікно консолі в очікуванні дії користувача, щоб закрити його.
- Кінець основної підпроцедури.
- Кінець модуля.
Створення винятку у VB.Net
У обробці винятків ви можете викинути об’єкт. Однак об’єкт має бути похідним від System. Клас винятків, прямо чи опосередковано. Наприклад:
Приклад виняткової ситуації Throw у VB.Net
Нижче наведено приклад виключення виключення у VB.Net:
Крок 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 для запуску, незалежно від того, перехоплено виняток чи ні.
- Повідомлення для друку на консолі під час виконання блоку Finally.
- Кінець коду обробки винятків.
- Призупинити консоль на деякий час, чекаючи, поки користувач закриє її.
- Кінець основної підпроцедури.
- Кінець модуля.
Підсумки
- Виняток відноситься до проблеми, яка виникає під час виконання програми, спричиненої несподіваними обставинами.
- Якщо ви підозрюєте, що якийсь код створить виняток, оточіть його блоком Try/Catch.
- Блок Finally приходить після блоку Try/Catch і виконується незалежно від того, перехоплено виняток чи ні.
- VB.Net дозволяє нам створювати спеціальні винятки.