Co to jest wyjątek?
Wyjątek dotyczy problemu, który pojawia się podczas wykonywania programu. Jest to spowodowane nieoczekiwanymi okolicznościami. Dobrym przykładem jest dzielenie przez zero (0). Zostanie zgłoszony wyjątek.
W tym samouczku dotyczącym języka Visual Basic dowiesz się:
- Co to jest wyjątek?
- Co to jest obsługa wyjątków?
- Składnia Try / Catch
- Przykład obsługi wyjątków
- Wyjątki zdefiniowane przez użytkownika
- Rzucanie przedmiotów
Co to jest obsługa wyjątków?
Z wyjątkami można przenieść kontrolę nad programem z jednej części do drugiej. W VB.NET wyjątki są obsługiwane za pomocą następujących 4 słów kluczowych:
Słowo kluczowe | Szczegół |
Próbować | Zadaniem bloku Try jest identyfikacja bloku kodu, dla którego zostanie aktywowany określony wyjątek. Po nim powinien nastąpić blok (i) zaczepu. |
Złapać | Wyłapywanie wyjątku odbywa się w tym bloku. Jest to procedura obsługi wyjątków, w której obsługiwany jest wyjątek. |
Wreszcie | Użyj bloku Wreszcie, aby uruchomić zestaw instrukcji niezależnie od tego, czy wystąpił wyjątek, czy nie. |
Rzucać | Wyjątek jest zgłaszany po wystąpieniu problemu. To jest dzieło słowa kluczowego Throw. |
Składnia Try / Catch
Instrukcje Try / Catch przyjmują składnię podaną poniżej:
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
Blok Try / Catch powinien otaczać kod, który może zgłosić wyjątek. Ten kod jest nazywany kodem chronionym. Możesz użyć wielu instrukcji catch, gdy chcesz przechwycić różne typy wyjątków.
Przykład obsługi wyjątków
Za pomocą instrukcji Try / Catch można oddzielić zwykły kod programu od systemu obsługi błędów. Pozwól nam zademonstrować, jak obsłużyć wyjątek za pomocą słów kluczowych Try, Catch i Final.
Krok 1) Utwórz nową aplikację konsolową.
Krok 2) Użyj tego kodu:
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
Krok 3) Kliknij przycisk Start na pasku narzędzi, aby wykonać kod. Powinieneś otrzymać następujące dane wyjściowe:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Tworzenie modułu o nazwie Module1.
- Tworzenie procedury podrzędnej o nazwie DivisionFunction z dwoma argumentami całkowitymi n1 i n2. ByVal to słowo kluczowe VB.NET stwierdzające, że wartości argumentów będą przekazywane według wartości.
- Tworzenie zmiennej całkowitej o nazwie odpowiedź.
- Początek bloku Try / Catch. Musimy otoczyć kod, który, jak podejrzewamy, może wywołać wyjątek tym blokiem.
- Wykonanie operacji dzielenia pomiędzy wartościami zmiennych n1 i n2. Wynik operacji dzielenia jest przypisywany do zmiennej odpowiedzi. Ten kod może zgłosić wyjątek, na przykład, gdy podzielimy liczbę przez zero, dlatego otoczyliśmy ją blokami Try / Catch.
- Przechwytywanie wyjątku o nazwie DivideByZeroException i przypisywanie wygenerowanego komunikatu o wyjątku do ex.
- Drukowanie tekstu na konsoli w celu powiadomienia użytkownika o typie / nazwie wyjątku, który został zgłoszony.
- Blok Final. Spowoduje to wykrycie wyjątku, czy nie.
- Drukowanie tekstu na konsoli przedstawiającego wynik operacji dzielenia.
- Koniec bloku Try, czyli koniec kodu obsługi błędów.
- Koniec podprocedury funkcji podziału.
- Rozpoczęcie głównej podprocedury.
- Wywołanie / wywołanie procedury podrzędnej DivisionFunction. W tym miejscu przekazywane są wartości dwóch argumentów całkowitych. Wartość n1 = 4 i n2 = 0. Oznacza to, że operacja dzielenia będzie wynosić 4 \ 0, czyli n1 \ n2.
- Wstrzymywanie okna konsoli w oczekiwaniu na podjęcie działania przez użytkownika w celu jego zamknięcia.
- Koniec głównej podprocedury.
- Koniec modułu.
Wyjątki zdefiniowane przez użytkownika
VB.NET umożliwia definiowanie własnych wyjątków. Możesz pobrać klasy wyjątków zdefiniowane przez użytkownika z klasy ApplicationException. Pokażmy to na przykładzie:
Krok 1) Utwórz nową aplikację konsolową.
Krok 2) Użyj następującego kodu:
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
Krok 3) Kliknij przycisk Start na górnym pasku, aby wykonać kod. Powinieneś otrzymać następujące dane wyjściowe:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Tworzenie modułu o nazwie Module1.
- Tworzenie klasy wyjątku o nazwie HeightIsZeroException. Klasa dziedziczy całą klasę ApplicationException.
- Tworzenie procedury podrzędnej o nazwie Nowa. Zajmie jeden argument tekstowy o nazwie text.
- Wywołanie konstruktora klasy bazowej i przekazanie do niego powyższego argumentu.
- Koniec nowej podprocedury.
- Koniec klasy HeightIsZeroException.
- Tworzenie klasy o nazwie Height. Modyfikator dostępu publicznego to Public, co oznacza, że będzie dostępny publicznie.
- Tworzenie zmiennej całkowitej o nazwie Height i inicjowanie jej wartości na 0.
- Tworzenie procedury podrzędnej o nazwie showHeight ().
- Sprawdzanie, kiedy wartość zmiennej Height wynosi 0. Użyliśmy warunku If… Then.
- Aby zgłosić wyjątek HeightIsZeroException, jeśli powyższy warunek jest prawdziwy. Po zgłoszeniu tego wyjątku zostanie wyświetlony komunikat o zerowej wysokości.
- Część Else do wykonania, gdy warunek Jeśli nie jest prawdziwy.
- Komunikat do wydrukowania na konsoli pokazujący wysokość, gdy nie jest to 0.
- Koniec warunku Jeśli.
- Koniec podprocedury showHeight ().
- Koniec klasy Wysokość.
- Rozpoczęcie głównej podprocedury.
- Utworzenie obiektu o nazwie Height jako instancji klasy Height.
- Początek bloku obsługi wyjątków.
- Wywołanie procedury podrzędnej showHeight () zdefiniowanej w klasie Height. Użyliśmy obiektu tej klasy, aby uzyskać dostęp do tej metody. Ta linia może spowodować wyjątek. Dlatego otoczyliśmy go kodem obsługi wyjątków.
- Przechwytywanie wyjątku HeightIsZeroException jako obiektu ex w przypadku jego wystąpienia.
- Komunikat do wydrukowania na konsoli, gdy zostanie przechwycony wyjątek HeightIsZeroException.
- Koniec bloku obsługi wyjątków.
- Wstrzymaj okno konsoli, czekając, aż użytkownik podejmie akcję, aby je zamknąć.
- Koniec głównej podprocedury.
- Koniec modułu.
Rzucanie przedmiotów
W przypadku obsługi wyjątków możesz zdecydować się na rzucenie obiektu. Jednak obiekt musi pochodzić z System. Klasa wyjątków, bezpośrednio lub pośrednio. Na przykład:
Krok 1) Utwórz nową aplikację konsolową.
Krok 2) Użyj następującego kodu:
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
Krok 3) Kliknij przycisk Start na górnym pasku, aby wykonać kod. Powinieneś otrzymać:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Tworzenie modułu o nazwie Module1.
- Rozpoczęcie głównej podprocedury.
- Początek kodu obsługi błędów.
- Zgłaszanie obiektu wyjątku. Ten kod może generować wyjątek, dlatego otoczyliśmy go blokiem Try / Catch.
- Przechwytywanie wyjątku jako obiektu ex, jeśli linia zgłasza wyjątek.
- Drukowanie komunikatu o wyjątku na konsoli w przypadku jego wystąpienia.
- Blok Final, który ma być uruchamiany niezależnie od tego, czy wyjątek zostanie złapany, czy nie.
- Komunikat do wydrukowania na konsoli po wykonaniu bloku Final.
- Koniec kodu obsługi wyjątków.
- Zatrzymaj konsolę na chwilę, czekając, aż użytkownik podejmie akcję, aby ją zamknąć.
- Koniec głównej podprocedury.
- Koniec modułu.
Podsumowanie
- Wyjątek odnosi się do problemu, który pojawia się podczas wykonywania programu, spowodowany nieoczekiwanymi okolicznościami.
- Jeśli podejrzewasz, że jakiś kod wygeneruje wyjątek, otocz go blokiem Try / Catch.
- Blok Final znajduje się po bloku Try / Catch i jest wykonywany niezależnie od tego, czy wyjątek został przechwycony, czy nie.
- VB.NET pozwala nam tworzyć niestandardowe wyjątki.