Mikä on poikkeus?
Poikkeus viittaa ongelmaan, joka syntyy ohjelman suorituksen aikana. Sen aiheuttaa odottamaton olosuhde. Hyvä esimerkki on, kun suoritat jako-operaatiota ja jaat sitten nollalla (0). Poikkeus nostetaan.
Tässä Visual Basic -opetusohjelmassa opit:
- Mikä on poikkeus?
- Mikä on poikkeusten käsittely?
- Kokeile / kiinni -syntaksi
- Esimerkki poikkeusten käsittelemisestä
- Käyttäjän määrittelemät poikkeukset
- Esineiden heittäminen
Mikä on poikkeusten käsittely?
Poikkeuksia lukuun ottamatta voit siirtää ohjelman hallinnan osasta toiseen. VB.NET: ssä poikkeuksia käsitellään seuraavilla 4 avainsanalla:
Avainsana | Yksityiskohta |
Yrittää | Try-lohkon tehtävänä on tunnistaa koodilohko, jolle tietty poikkeus aktivoidaan. Sen jälkeen tulisi olla kiinnityslohko (t). |
Ottaa kiinni | Poikkeus saadaan kiinni tässä lohkossa. Se on poikkeuskäsittelijä, jossa poikkeusta käsitellään. |
Lopuksi | Käytä Viimeinen-lohkoa lausejoukon suorittamiseen riippumatta siitä, onko poikkeus tapahtunut vai ei. |
Heittää | Poikkeus heitetään ongelman esiintymisen jälkeen. Tämä on Heitä-avainsanan työ. |
Kokeile / kiinni -syntaksi
Try / Catch-käskyt käyttävät alla olevaa syntaksia:
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-lohkon tulisi ympäröidä koodi, joka saattaa aiheuttaa poikkeuksen. Tämä koodi tunnetaan suojattuna koodina. Voit käyttää useita saalislausekkeita, kun sinun on pyydettävä erityyppisiä poikkeuksia.
Esimerkki poikkeusten käsittelemisestä
Try / Catch-käskyjen avulla voit erottaa tavallisen ohjelmakoodisi virheiden käsittelyjärjestelmästä. Osoittakaamme, kuinka poikkeusta käsitellään kokeilemalla, kiinni ja lopuksi avainsanoilla.
Vaihe 1) Luo uusi konsolisovellus.
Vaihe 2) Käytä tätä koodia:
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
Vaihe 3) Suorita koodi napsauttamalla työkalurivin Käynnistä-painiketta. Sinun pitäisi saada seuraava tulos:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Moduulin nimisen moduulin luominen 1.
- Alitoiminnon luominen nimeltä divisioonatoiminto, jossa on kaksi kokonaislukuargumenttia n1 ja n2. ByVal on VB.NET-avainsana, joka ilmoittaa, että argumenttien arvot välitetään arvojen mukaan.
- Luodaan kokonaisluku muuttuja nimeltä vastaus.
- Aloita Try / Catch-lohko. Meidän on ympäröitävä koodi, jonka epäilemme mahdollisesti aiheuttavan poikkeuksen tässä lohkossa.
- Suoritetaan jakooperaatio muuttujien n1 ja n2 arvojen välillä. Jakamistoiminnon tulos osoitetaan muuttujalle vastaus. Tämä koodi voi aiheuttaa poikkeuksen, esimerkiksi kun jaamme luvun nollalla, joten olemme ympäröineet sen Try / Catch-lohkoilla.
- DivideByZeroException-nimisen poikkeuksen sieppaaminen ja generoidun poikkeussanoman määrittäminen entiselle
- Tulostamalla tekstiä konsolille ilmoittaaksesi käyttäjälle korotetun tyypin / nimen.
- Viimeinen lohko. Tämä suorittaa, onko poikkeus kiinni vai ei.
- Tulostetaan tekstiä konsolille, joka osoittaa jako-operaation tuloksen.
- Kokeile-lohkon loppu eli virhekäsittelykoodin loppu.
- DivisionFunction-alimenettelyn loppu.
- Päämenettelyn alku.
- DivisionFunction-alimenettelyn kutsuminen / kutsuminen Kahden kokonaislukuargumentin arvot välitetään tähän. Arvo n1 = 4 ja n2 = 0. Tämä tarkoittaa, että jako-operaatio on 4 \ 0, ts. N1 \ n2.
- Keskeytetään konsoli-ikkunan odottaminen, kunnes käyttäjä ryhtyy toimiin sen sulkemiseksi.
- Päämenettelyn loppu.
- Moduulin loppu.
Käyttäjän määrittelemät poikkeukset
VB.NET antaa sinun määrittää omat poikkeuksesi. Voit saada käyttäjän määrittämiä poikkeusluokkia ApplicationException-luokasta. Osoittakaamme tätä esimerkillä:
Vaihe 1) Luo uusi konsolisovellus.
Vaihe 2) Käytä seuraavaa koodia:
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
Vaihe 3) Suorita koodi napsauttamalla yläpalkin Käynnistä-painiketta. Sinun pitäisi saada seuraava tulos:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Moduulin nimisen moduulin luominen 1.
- Luodaan poikkeusluokka nimeltä HeightIsZeroException. Luokka perii kaikki ApplicationException-luokan.
- Uuden alimenettelyn luominen. Se vie yhden merkkijonon argumentin nimeltä teksti.
- Soitetaan perusluokan rakentaja ja välitetään sille yllä oleva argumentti.
- Uuden alimenettelyn loppu.
- HeightIsZeroException-luokan loppu.
- Luodaan luokka nimeltä Korkeus. Sen julkisen pääsyn muokkaaja on Julkinen, mikä tarkoittaa, että se on julkisesti saatavilla.
- Luodaan kokonaisluku muuttuja nimeltä Korkeus ja alustetaan sen arvo nollaksi.
- Luo alimenettely, jonka nimi on showHeight ().
- Tarkistetaan, milloin muuttujan Korkeus arvo on 0. Olemme käyttäneet If… Then -ehtoa.
- Heittää HeightIsZeroException, jos yllä oleva ehto on totta. Viesti Zero Height Found näytetään, kun tämä poikkeus heitetään.
- Muu osa, joka suoritetaan, jos If-ehto ei ole totta.
- Konsolille tulostettava viesti, joka näyttää korkeuden, kun se ei ole 0.
- If-ehdon loppu.
- ShowHeight () -alimenettelyn loppu.
- Luokan loppu Korkeus.
- Päämenettelyn alku.
- Kohteen nimeltä Korkeus luominen Korkeus-luokan esiintymänä.
- Poikkeusten käsittelylohkon alku.
- Käynnistetään korkeus-luokassa määritelty showHeight () -alimenettely. Olemme käyttäneet tämän luokan objektia tämän menetelmän käyttämiseen. Tämä rivi voi johtaa poikkeukseen. Siksi olemme ympäröineet sen poikkeusten käsittelykoodilla.
- HeightIsZeroException-poikkeuksen saaminen objektina ex, jos se tapahtuu.
- Konsolille tulostettava viesti, kun HeightIsZeroException on kiinni.
- Poikkeuksen käsittelylohkon loppu.
- Keskeytä konsoli-ikkuna odottamaan käyttäjän ryhtyvän toimiin sen sulkemiseksi.
- Päämenettelyn loppu.
- Moduulin loppu.
Esineiden heittäminen
Poikkeuksellisessa käsittelyssä voit heittää kohteen. Objektin on kuitenkin oltava johdettu järjestelmästä. Poikkeusluokka, suoraan tai epäsuorasti. Esimerkiksi:
Vaihe 1) Luo uusi konsolisovellus.
Vaihe 2) Käytä seuraavaa koodia:
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
Vaihe 3) Suorita koodi napsauttamalla yläpalkin Käynnistä-painiketta. Sinun pitäisi saada seuraava:
Tässä on kuvakaappaus koodista:
Koodin selitys:
- Moduulin nimisen moduulin luominen 1.
- Päämenettelyn alku.
- Virhekäsittelykoodin alku.
- Poikkeusobjektin heittäminen. Tämä koodi voi luoda poikkeuksen, joten olemme ympäröineet sen Try / Catch-lohkolla.
- Poikkeuksen sieppaaminen objektina ex, jos viiva heittää poikkeuksen.
- Tulostetaan poikkeussanoma konsolille, jos se tapahtuu.
- Viimeinen lohko suorittaa, onko poikkeus kiinni vai ei.
- Konsolille tulostettava viesti, kun viimeinen lohko suoritetaan.
- Poikkeuksen käsittelykoodin loppu.
- Keskeytä konsoli hetkeksi odottaessasi käyttäjän ryhtyvän toimiin sen sulkemiseksi.
- Päämenettelyn loppu.
- Moduulin loppu.
Yhteenveto
- Poikkeus viittaa ongelmaan, joka syntyy odottamattomien olosuhteiden aiheuttaman ohjelman suorituksen aikana.
- Jos epäilet, että jokin koodi tuottaa poikkeuksen, ympäröi se Try / Catch-lohkolla.
- Viimeinen lohko tulee Try / Catch-lohkon jälkeen ja suorittaa, onko poikkeus kiinni vai ei.
- VB.NET antaa meille mahdollisuuden luoda mukautettuja poikkeuksia.