java exceptions exception handling with examples
Deze videozelfstudie over Java-uitzonderingen legt alles uit over het afhandelen van uitzonderingen in Java. U leert over uitzonderingshiërarchie, typen, klassemethoden en meer:
Wanneer we Java-programma's uitvoeren, wordt het normale gedrag of de normale stroom van het programma onderbroken vanwege een aantal onverwachte gebeurtenissen.
Bijvoorbeeld, we openen een bestand om de gegevens te lezen. Wanneer de aanroep Open bestand wordt uitgevoerd, zien we dat het bestand dat we proberen te openen, ontbreekt. Dit resulteert in een onderbreking van de normale stroom van het programma.
Deze gebeurtenis die de normale stroom van het programma beïnvloedt of onderbreekt, wordt de ' Uitzondering
Bezoek hier om de Java Training Series For All te ontdekken.
Hier is een videozelfstudie over het omgaan met Java-uitzonderingen:
Wat je leert:
- Afhandeling van uitzonderingen in Java
- Soorten uitzonderingen in Java
- Lijst met uitzonderingen in Java
- Gevolgtrekking
Afhandeling van uitzonderingen in Java
Als er een uitzondering optreedt in het programma, wordt de uitvoering van het programma beëindigd. Aangezien dit een abrupte beëindiging is, genereert het systeem een bericht en geeft dit weer. Het bericht dat door het systeem wordt gegenereerd, kan cryptisch zijn, zoals sommige codes, of onleesbaar.
De normale gebruiker zou dus moeten begrijpen waarom het programma de uitvoering abrupt stopte, hij / zij zou de reden moeten weten. De door het systeem gegenereerde berichten als resultaat van een uitzondering zijn mogelijk niet nuttig. In Java kunnen we de uitzondering afhandelen en de gebruiker zinvolle berichten over het probleem geven.
Deze afhandeling van uitzonderingen, algemeen bekend als 'Afhandeling van uitzonderingen' is een van de meest opvallende kenmerken van Java-programmering.
Redenen voor het optreden van de uitzondering
We kunnen verschillende redenen hebben waardoor uitzonderingen kunnen optreden. Als het een uitzondering is met betrekking tot invoer, kan de reden zijn dat de invoergegevens onjuist of onleesbaar zijn.
Als we een uitzondering krijgen voor bestands-I / O, is het heel goed mogelijk dat de bestanden waarmee we te maken hebben niet bestaan. Op een ander moment kunnen er fouten zijn zoals netwerkproblemen, de printer is niet beschikbaar of functioneert, enz.
In een programma krijgen we behalve uitzonderingen ook fouten. Om de uitzonderingen effectief af te handelen, moeten we ons dus bewust zijn van de verschillen tussen fouten en uitzonderingen.
Een fout duidt op een serieuzer probleem met de toepassing en de toepassing mag deze niet proberen op te vangen. Integendeel, de uitzondering is een voorwaarde die elke redelijke toepassing zal proberen te vangen.
Een fout in de applicatie is dus ernstiger en de applicaties zouden crashen wanneer ze een fout tegenkomen. Uitzonderingen daarentegen komen voor in de code en kunnen door de programmeur worden afgehandeld door middel van corrigerende maatregelen.
Wat is het afhandelen van uitzonderingen?
De afhandeling van uitzonderingen in Java is een mechanisme waarmee de normale stroom van de toepassing wordt gehandhaafd. Om dit te doen, gebruiken we een krachtig mechanisme om runtime-fouten of uitzonderingen in een programma af te handelen.
Een reeks code die wordt gebruikt om de uitzondering af te handelen, wordt de 'Exception-handler' genoemd. Een exception-handler ondervraagt de context op het punt waarop de uitzondering optrad. Dit betekent dat het de variabelewaarden leest die binnen het bereik vielen terwijl de uitzondering optrad en vervolgens het Java-programma herstelt om door te gaan met de normale stroom.
Voordelen van het afhandelen van uitzonderingen
Het grote voordeel van het afhandelen van uitzonderingen is dat het de normale stroom van de applicatie handhaaft ondanks het optreden van een uitzondering. Als er een uitzondering optreedt, wordt het programma meestal abrupt beëindigd.
Het hebben van een exception handler in een programma zal er niet voor zorgen dat het programma abrupt wordt beëindigd. In plaats daarvan zorgt een uitzonderingshandler ervoor dat alle instructies in het programma normaal worden uitgevoerd en dat de programmastroom niet abrupt wordt afgebroken.
Uitzonderingshiërarchie in Java
Het onderstaande diagram toont de uitzonderingshiërarchie in Java. De klasse java.lang.Throwable (afstammeling van de klasse Object) is de hoofdklasse van Java Exception. De klassen Uitzondering en Fout zijn afgeleid van deze klasse.
Uitzonderingsklasse is de basisklasse voor alle andere uitzonderingen.
Hieronder vindt u een hiërarchie van de uitzonderingsklasse in Java die alle belangrijke uitzonderingen opsomt waarvan een Java-programmeur op de hoogte moet zijn.
Uitzonderingsklasse in Java
Zoals te zien is in het hiërarchiediagram, heeft klasse Throwable twee directe subklassen, namelijk Uitzondering en Fout. Uitzonderingen die voortvloeien uit een externe bron worden beschreven in de klasse Uitzondering.
De Exception-klasse verklaart dat de constructors hetzelfde zijn als de Throwable-klasse en het aanroepen van elke constructor roept ook zijn Throwable-tegenhanger op. Uitzonderingsklasse declareert zijn methoden niet, het erft Throwable-klassemethoden.
De constructors en methoden die de klasse Exception gebruikt, worden hieronder weergegeven.
Constructeurs
Bouwer Omschrijving openbare uitzondering () Een standaardconstructor die een nieuwe uitzondering construeert met het bericht als null. openbare uitzondering (tekenreeksbericht) Constructor om een nieuwe uitzondering te construeren met het gegeven bericht. In dit geval wordt de oorzaak niet geïnitialiseerd en kan een volgende aanroep van Throwable.initCause (java.lang.Throwable) worden gebruikt om de oorzaak te initialiseren. openbare uitzondering (tekenreeksbericht, mogelijke oorzaak) Construeert een nieuwe uitzondering met behulp van een gegeven bericht en oorzaak. openbare uitzondering (te werpen oorzaak) Construeert een nieuwe uitzondering met de opgegeven oorzaak en een bericht gegeven door (cause == null? Null: cause.toString ()) (die doorgaans de klasse en het detailbericht van de oorzaak bevat). beschermde uitzondering (tekenreeksbericht, mogelijke oorzaak, boolean enableSuppression, boolean writableStackTrace) Construeert een nieuwe uitzondering met het gegeven bericht, de oorzaak, de onderdrukking (ingeschakeld of uitgeschakeld) en de beschrijfbare stacktracering (ingeschakeld of uitgeschakeld).
Methoden
Methode Prototype | Omschrijving |
---|---|
openbare String getMessage () | Krijg een gedetailleerd bericht over de uitzondering die is opgetreden. |
openbaar Throwable getCause () | Zoek de oorzaak van de uitzondering die wordt vertegenwoordigd door een werpbaar object |
openbare String toString () | Voegt de naam van de klasse samen met het resultaat van getMessage () en retourneert de resulterende string. |
openbare leegte printStackTrace () | Drukt het resultaat van toString () en de inhoud van de stacktracering af naar de foutuitvoerstroom System.err. |
openbare StackTraceElement () getStackTrace () | Verkrijg elk element in de stacktracering in de vorm van een array. |
openbare Throwable fillInStackTrace () | Vul de stacktracering met de huidige stacktrace. |
Uitzonderingsvoorbeeld
Vervolgens presenteren we een Java-programma om een eenvoudig uitzonderingsvoorbeeld te demonstreren. Hier bieden we een stringvariabele die is geïnitialiseerd op een null-waarde. Wanneer we deze variabele proberen af te drukken, wordt er een uitzondering gegenereerd omdat de tekenreekswaarde niet null kan zijn.
Uitvoer
Soorten uitzonderingen in Java
Java ondersteunt drie soorten uitzonderingen:
- Uitzondering gecontroleerd
- Uitzondering niet aangevinkt
- Fout
In deze sectie zullen we alle bovenstaande drie typen bespreken.
# 1) Gecontroleerde uitzondering
Sommige uitzonderingen worden gecontroleerd tijdens het compileren wanneer de code wordt gecompileerd. Dit zijn 'gecontroleerde uitzonderingen'. Het Java-programma genereert een compilatiefout wanneer het constateert dat de code in een programma foutgevoelig is.
We kunnen de compilatiefouten die door een gecontroleerde uitzondering worden veroorzaakt, verhelpen door de uitzonderingen af te handelen door de code in een try-catch-blok te plaatsen of door het trefwoord throws te gebruiken.
In de Exception-hiërarchie zijn de klassen die de Throwable-klasse rechtstreeks erven, zoals IOException, ClassNotFoundException, enz. Allemaal aangevinkt als uitzondering, behalve de klassen RuntimeException en Error. Dit zijn ongecontroleerde uitzonderingen.
Het volgende Java-programma demonstreert de gecontroleerde uitzonderingen, FileNotFoundException en IOException. In dit programma proberen we een niet-bestaand bestand te openen en ervan te lezen.
Omdat het bestand niet bestaat, genereert de open bestandsmethode FileNotFoundException. Wanneer we vervolgens proberen de inhoud van het bestand te lezen en het bestand te sluiten, gooien de methodeaanroepen IOException.
Uitvoer
In de bovenstaande uitvoer krijgen we compilatiefouten voor gecontroleerde uitzonderingen, aangezien de exception handler afwezig is.
Laten we nu een throw-clausule voor dit programma opgeven. Aangezien de ouder van FileNotFoundException IOException is, specificeren we alleen de IOException na de throw-clausule.
Uitvoer
Zoals blijkt uit de uitvoer, levert het behandelen van de uitzondering een meer betekenisvolle uitvoer op in plaats van de compilatiefouten.
# 2) Uitzondering niet aangevinkt
Niet-aangevinkte uitzonderingen zijn de uitzonderingen die tijdens runtime worden gecontroleerd. Ondanks uitzonderingen zal een compilatie van programma's dus succesvol zijn. De meeste ongecontroleerde uitzonderingen worden gegenereerd vanwege de slechte gegevens die in het programma worden gebruikt.
De klassen die 'RuntimeException' erven, zijn ongecontroleerde uitzonderingen. Uitzonderingen zoals ArrayIndexOutofBounds Exception, ArithmeticException, NullPOinterException, etc. zijn voorbeelden van ongecontroleerde uitzonderingen.
Het volgende programma demonstreert een bij runtime ongecontroleerde uitzondering die wordt veroorzaakt door het delen van een getal door nul.
Uitvoer
We zien dat het programma met succes is gecompileerd en dat de ArithmeticException tijdens runtime wordt gegenereerd.
Voorbeelden van ongecontroleerde uitzondering:
- ArrayIndexOutOfBoundsException
- NullPointerException
- IllegalArgumentException
- NumberFormatException
Afgezien van de bovenstaande twee uitzonderingen, zijn er nog enkele gecontroleerde uitzonderingen, waaronder:
- SQLException
- InvocationTargetExecption
# 3) Fout
Een fout is meestal een onomkeerbare en onherstelbare situatie in een programma en als er een fout optreedt, lopen de programma's vast. Enkele voorbeelden van fouten in een programma zijn OutOfMemoryError, AssertionError en VirtualMachineError, enz.
De foutklasse erft van de klasse Throwable. Fout beschrijft een situatie die niet kan worden afgehandeld en resulteert in het vastlopen van een programma.
Laten we de OutOfMemory-fout in dit gedeelte bespreken als een voorbeeld van een fout.
We weten dat alle objecten in Java worden toegewezen met behulp van de nieuwe operator en op de heap worden opgeslagen. Wanneer de heap geen geheugen meer heeft, kan de Java Virtual Machine (JVM) het object niet toewijzen. Tegelijkertijd kan de garbage collector geen geheugen vrijmaken. Deze situatie geeft aanleiding tot de OutOfMemory-fout.
De OutOfMemoryError in Java ziet er als volgt uit:
De aanwezigheid van OutOfMemoryError in een programma betekent dat er ofwel te veel gegevens worden verwerkt of dat de objecten te lang worden vastgehouden. Soms kan het ook een bibliotheek van een derde partij zijn die geheugen gebruikt.
Oorzaken van OutOfMemoryError
# 1) Java Heap Space
Als een toepassing te veel finalizers heeft, worden de klasseobjecten met de Finalize-methode niet onmiddellijk teruggewonnen door de garbage collector, maar worden ze in de wachtrij geplaatst voor finalisatie op een later tijdstip. Soms kan de afronding de tijd niet bijhouden en is het heap-geheugen vol, wat resulteert in OutOfMemoryError.
Een andere reden voor OutOfMemoryError is dat de opgegeven heapgrootte mogelijk onvoldoende is voor de toepassing.
De volgende code demonstreert de OutOfMemoryError die kan optreden als gevolg van een enorme datagrootte die voor een array is gedeclareerd.
Uitvoer
# 2) Permgen Space
Het permanente generatiegebied in het geheugen kan ook uitgeput zijn en kan een OutOfMemory-fout genereren.
De grootte van de PermGen-regio wordt ingesteld tijdens de lancering van JVM. Als de gebruiker de grootte niet instelt, wordt de standaardgrootte gebruikt die platformspecifiek is.
Hoewel de bovenstaande twee meestal de hoofdoorzaken zijn van het optreden van OutOfMemoryError, kunnen er andere oorzaken zijn, zoals de array-grootte die de VM-limiet overschrijdt, enz.
Lijst met uitzonderingen in Java
Hieronder vindt u een lijst met de belangrijkste uitzonderingen die in Java voorkomen. Voor enkele van deze uitzonderingen hebben we programmeervoorbeelden gegeven. Merk op dat dit ingebouwde uitzonderingen zijn die worden ondersteund door Java.
# 1) ArithmeticException: Rekenkundige afwijkingen zoals delen door nul resulteren in ArithmeticException.
beste sites om gratis anime te kijken
Het onderstaande programma demonstreert het voorkomen van ArithmeticException.
Uitvoer
# 2) ArrayIndexOutOfBoundsException: ArrayIndexOutOfBoundsException wordt gegenereerd wanneer een array-element wordt geopend met een ongeldige index. De gebruikte index is groter dan de array of is negatief.
# 3) ClassNotFoundException: Als de klassendefinitie niet wordt gevonden, wordt de ClassNotFoundException geactiveerd.
# 4) FileNotFoundException: FileNotFoundException wordt gegeven als het bestand niet bestaat of niet wordt geopend.
# 5) IOException: IOException wordt gegenereerd wanneer de invoer-uitvoerbewerking mislukt of wordt onderbroken.
# 6) InterruptedException: Telkens wanneer een thread bezig is met verwerken of slaapt of wacht, wordt deze onderbroken door InterruptedException te gooien.
# 7) NoSuchFieldException: Als een klasse geen opgegeven veld of variabele bevat, wordt NoSuchFieldException gegenereerd.
# 8) NoSuchMethodException: Als de methode waartoe toegang wordt verkregen niet wordt gevonden, wordt NoSuchMethodException geactiveerd.
# 9) NullPointerException: NullPointerException wordt gegenereerd wanneer een null-object wordt verwezen. Dit is de belangrijkste en meest voorkomende uitzondering in Java.
# 10) NumberFormatException: Deze uitzondering doet zich voor wanneer een methode een tekenreeks niet naar een numeriek formaat kon converteren.
# 11) RuntimeException: Elke uitzondering die tijdens runtime optreedt, is een RuntimeException.
# 12) StringIndexOutOfBoundsException: De StringIndexOutOfBoundsException wordt gegenereerd door de klasse String en geeft aan dat de index groter is dan de grootte van het String-object of negatief is.
# 13) EOF-uitzondering: EOFException is een onderdeel van het java.io-pakket en wordt gegenereerd wanneer het einde van het bestand is bereikt en het bestand wordt gelezen.
# 14) IllegalArgumentException: IllegalArgumentException wordt gegenereerd wanneer illegale of ongeldige argumenten worden doorgegeven aan de methode. Bijvoorbeeld, het verkeerde gegevensformaat, null-waarde wanneer niet-null is vereist of argumenten buiten het bereik.
Het onderstaande Java-programma demonstreert de IllegalArgumentException.
Uitvoer
In het bovenstaande programma wordt de IllegalArgumentException gegenereerd in de tweede aanroep van de functie setMarks waar we de markeringen invoeren die buiten het bereik vallen (> 45).
# 15) InputMismatchException: InputMismatchException wordt gegenereerd wanneer de gelezen invoer niet overeenkomt met een opgegeven patroon. Bijvoorbeeld, als het programma een integer verwacht en een float leest, wordt de InputMismatchException verhoogd.
# 16) NoSuchElementException: NoSuchElementException wordt gegenereerd wanneer het volgende element waartoe toegang wordt verkregen, niet bestaat.
Bijvoorbeeld, in Enumeration wordt de methode nextElement () gebruikt om toegang te krijgen tot het volgende element in de opsomming. Als het element niet bestaat, wordt NoSuchElementException gegenereerd. Meestal gooien Java-verzamelingen deze uitzondering.
Het onderstaande programma laat dit zien.
Uitvoer
# 17) ConcurrentModificationException: ConcurrentModificationException wordt meestal gegenereerd door Collectieklassen. Deze uitzondering treedt op wanneer de objecten tegelijkertijd proberen een bron te wijzigen.
Bijvoorbeeld, een thread kan een collectie niet wijzigen wanneer een andere thread er toegang toe heeft. Als we twee threads toestaan, hebben die twee tegelijkertijd toegang tot de verzameling en zullen er inconsistenties zijn.
Het volgende voorbeeld toont de ConcurrentModificationException.
Uitvoer
In het bovenstaande programma, terwijl de ArrayList wordt afgedrukt, proberen we tegelijkertijd een element te verwijderen. Dit is de gelijktijdige toegang en er wordt dus een uitzondering gegenereerd.
Aangepaste uitzonderingen in Java
Tot nu toe hebben we alle uitzonderingen besproken die zijn ingebouwd of geleverd door de Java-taal. Afgezien van deze uitzonderingen, kunnen we ook onze eigen uitzonderingen definiëren. Dit worden aangepaste uitzonderingen of door de gebruiker gedefinieerde uitzonderingen genoemd.
Door aangepaste uitzonderingen te gebruiken, kunnen we onze uitzonderingen definiëren volgens onze behoeften.
In het volgende voorbeeld ziet u de aangepaste uitzondering die we hebben gedefinieerd voor een geheel getal.
Uitvoer
Veel Gestelde Vragen
V # 1) Wat bedoel je met uitzondering?
Antwoord: Een gebeurtenis die optreedt tijdens de uitvoering van een programma en de normale uitvoeringsstroom van het programma verstoort, wordt een uitzondering genoemd. De uitzondering is ongewenst en onverwacht en kan optreden als gevolg van externe factoren of programmeerfouten.
V # 2) Wat is het verschil tussen fout en uitzondering?
Antwoord: Uitzonderingen zijn gebeurtenissen die het normale verloop van het programma verstoren. We kunnen uitzonderingen in ons programma afhandelen en normaal doorgaan met het programma. Een fout is een onherstelbare gebeurtenis die niet kan worden afgehandeld en waarmee het programma wordt beëindigd.
V # 3) Wat bedoel je met het afhandelen van uitzonderingen?
Antwoord: Het proces van het specificeren van de reeks stappen in een programma om de uitzondering af te handelen, wordt Afhandeling van uitzonderingen genoemd. Door exception-handlers in een programma aan te bieden, kunnen we de normale stroom van het programma garanderen.
V # 4) Wat zijn de voordelen van het afhandelen van uitzonderingen in Java?
Antwoord: Door het afhandelen van uitzonderingen kunnen we de normale uitvoeringsstroom van een applicatie behouden. We kunnen de fouten ook verspreiden in de call-stack wanneer we exception handlers bieden.
Q # 5) Wat is het gebruik van afhandeling van uitzonderingen?
Antwoord: Het niet beëindigen van de normale uitvoeringsstroom van een applicatie is het belangrijkste gebruik van exception handlers in een programma. Zonder uitzonderingshandlers wordt het programma beëindigd en wordt de normale uitvoeringsstroom onderbroken wanneer zich een uitzondering voordoet.
Met uitzondering van een correct afgehandeld programma in het programma, kan het doorgaan met zijn normale uitvoering, zelfs als er een uitzondering optreedt.
Meer voorbeelden van uitzonderingen
Een uitzondering is een gebeurtenis die plaatsvindt terwijl het programma wordt uitgevoerd en die de uitvoering van het programma verstoort. Hierdoor zal het softwareproduct abrupt eindigen.
Als deze uitzondering optreedt, maakt Java een object met een foutbericht en informatie over de klasse. Dit is het uitzonderingsobject.
Waarom hebben we een uitzondering nodig in Java?
Klasse ExcepDemo zonder uitzondering:
UITGANG:
Klasse ExcepDemo met afhandeling van uitzonderingen:
UITGANG:
Probeer, vang en blokkeer uiteindelijk:
- Een uitzondering wordt afgehandeld door het blok try, catch.
- Verklaringen die tot uitzonderingen kunnen leiden, worden in het try-blok geschreven.
- Als er een uitzondering optreedt, worden de instructies in het catch-blok uitgevoerd. Als er geen uitzondering optreedt, wordt het catch-blok niet uitgevoerd.
- Ongeacht of er een uitzondering is opgetreden of niet is opgetreden, wordt het laatste blok uitgevoerd.
Uitzonderingstypen
Uitzondering niet aangevinkt:
Omdat ongecontroleerde uitzonderingen kunnen worden vermeden door de juiste programmering ( Bijv. null pointer Exception, Arithmetic Exception) zal niet zijn gecontroleerd door de compiler. Niet-aangevinkte uitzondering wordt tijdens runtime gegenereerd.
Gecontroleerde uitzondering:
- Aangevinkte uitzondering wordt gecontroleerd door de compiler en het is verplicht om de uitzondering te gooien of af te handelen.
- Deze uitzondering wordt gebruikt om de foutafhandelingscode te scheiden van de reguliere code.
- Alle aangevinkte uitzonderingen zijn gegroepeerd en het is handig om de problemen te onderscheiden.
Voorbeeld: java.io
Fouten
Er kan een fout optreden als gevolg van logische programmafouten of enig geheugen gerelateerd aan JVM-probleem.
Voorbeeld: Memory out of bound error of stack overflow error.
Gooien en gooien
Het trefwoord 'Throw' wordt gebruikt om de uitzondering te genereren, terwijl het trefwoord 'throws' wordt gebruikt om de uitzondering te declareren.
Gooi Voorbeeldprogramma:
Gooit Voorbeeldprogramma:
Throws worden gebruikt om informatie te geven dat deze methode deze specifieke uitzondering genereert. Wanneer u die specifieke methode aanroept, moet u die uitzondering afhandelen.
Belangrijkste punten om op te merken:
- Uitzonderingen zijn abnormale gebeurtenissen die zich voordoen tijdens de uitvoering van het programma en die de uitvoeringsstroom beïnvloeden.
- Een fout is iets anders dan uitzonderingen. Fouten Voorbeeld: Geheugen zonder fouten.
- Gecontroleerde uitzonderingen worden gecontroleerd tijdens het compileren en het is verplicht om met deze gecontroleerde uitzondering om te gaan.
- Een ongecontroleerde uitzondering treedt op tijdens de runtime.
Gevolgtrekking
Deze tutorial over het afhandelen van uitzonderingen in Java introduceerde de definitie van uitzonderingen, het afhandelen van uitzonderingen en de uitzonderingshiërarchie in Java. We hebben ook de uitzonderingsklasse in Java besproken die verschillende constructors en methoden biedt om toegang te krijgen tot uitzonderingen.
We hebben een lijst met veelvoorkomende uitzonderingen onderzocht die in Java voorkomen en hebben de programmeervoorbeelden voor de belangrijkste uitzondering gezien. We hebben ook de belangrijkste fouten besproken die optreden in een Java-programma, samen met de soorten uitzonderingen en aangepaste uitzonderingen.
Bekijk hier ALLE Java-tutorials.
Aanbevolen literatuur
- Top 10 Selenium-uitzonderingen en hoe hiermee om te gaan (exacte code)
- Afhandeling van JDBC-uitzonderingen - Hoe om te gaan met SQL-uitzonderingen
- Hoe om te gaan met uitzonderingen in SoapUI Groovy Scripts - SoapUI Tutorial # 11
- Java String met String Buffer en String Builder Tutorial
- Java-implementatie: creatie en uitvoering van Java JAR-bestand
- Java-threads met methoden en levenscyclus
- Java Virtual Machine: hoe JVM helpt bij het uitvoeren van Java-applicaties
- Toegang tot modificatoren in Java - Tutorial met voorbeelden