Afhandeling van uitzonderingen Java
⚡ Slimme samenvatting
Java Uitzonderingsafhandeling biedt een gestructureerd mechanisme voor het beheren van runtimefouten die de normale programmastroom verstoren. Het maakt gebruik van de trefwoorden `try`, `catch`, `finally`, `throw` en `throws` om uitzonderlijke omstandigheden te detecteren, te isoleren en te herstellen, terwijl de programmastroom behouden blijft.ping De applicaties zijn robuust en voorspelbaar.

Wat is een uitzondering in Java?
An Uitzondering binnen Java Een fout is een gebeurtenis die de uitvoering van programma-instructies onderbreekt en de normale programma-uitvoering verstoort. Het is een object dat informatie over een foutgebeurtenis binnen een methode bevat en aan het runtime-systeem wordt doorgegeven. JavaUitzonderingen worden voornamelijk gebruikt om verschillende soorten foutcondities aan te geven, zodat ontwikkelaars er op een gecontroleerde manier op kunnen reageren.
Er zijn twee grote categorieën fouten in Java:
- Compileertijdfouten
- Runtime-fouten
Compileerfouten kunnen verder worden onderverdeeld in twee typen:
- Syntaxisfouten
- Semantische fouten
Syntaxisfouten Voorbeeld:
In plaats van te verklaren int a; je hebt het ten onrechte aangegeven als in a;, waarvoor de compiler een foutmelding zal geven.
Voorbeeld van semantische fouten: Je hebt een variabele gedeclareerd int a; en na enkele regels code declareer je opnieuw een geheel getal als int a;Al deze fouten worden gemarkeerd wanneer u de code compileert.
Voorbeeld van runtimefouten
Een runtimefout wordt ook wel een runtimefout genoemd. uitzonderingEen uitzondering is elke gebeurtenis die de normale uitvoering van een programma onderbreekt. Voorbeelden van uitzonderingen zijn rekenkundige uitzonderingen, NullPointerException, deling door nul en nog veel meer. Uitzonderingen in Java Dit zijn omstandigheden die vaak buiten de directe controle van een ontwikkelaar vallen.
Klik hier als de video niet toegankelijk is
Waarom hebben we foutafhandeling nodig?
Stel, je hebt een programma geschreven om toegang te krijgen tot een server. Alles werkt prima tijdens de ontwikkeling.ping De code wordt uitgevoerd in een lokale omgeving met gecontroleerde omstandigheden.
Tijdens een daadwerkelijke productierun kan de server uitvallen. Wanneer uw programma probeert er toegang toe te krijgen, wordt er een uitzondering gegenereerd en zonder de juiste afhandeling zal het programma abrupt stoppen.
Hoe om te gaan met een uitzondering in Java
Tot nu toe hebben we gezien dat een uitzondering vaak buiten de controle van een ontwikkelaar ligt. Het is echter geen echte oplossing om codefouten toe te schrijven aan omgevingsfactoren. Je hebt robuuste programmering nodig die rekening houdt met uitzonderlijke situaties. Dergelijke code staat bekend als een Uitzonderingshandler.
In ons voorbeeld zou goede foutafhandeling betekenen dat wanneer de primaire server uitvalt, het programma automatisch verbinding maakt met een back-upserver.
Om dit te implementeren, zou je code kunnen schrijven om verbinding te maken met de server met behulp van traditionele if- en else-voorwaarden. Je controleert of de server niet beschikbaar is en zo ja, dan schrijf je code om verbinding te maken met de back-upserver. Een dergelijke organisatie van code met behulp van "if"- en "else"-takken is echter niet effectief wanneer je code meerdere vertakkingen bevat. Java uitzonderingen ermee omgaan.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Probeer het catch-blok in Java
Java Biedt een ingebouwd mechanisme voor foutafhandeling dat de normale logica scheidt van de logica voor foutcorrectie.
- De normale code gaat in a TRY blok.
- De code voor het afhandelen van uitzonderingen wordt in het bestand CATCH blok.
In ons voorbeeld bevat het TRY-blok de code om verbinding te maken met de server. Het CATCH-blok bevat de code om verbinding te maken met de back-upserver. Als de server actief is, wordt de code in het CATCH-blok genegeerd. Als de server niet actief is, wordt een uitzondering gegenereerd en wordt de code in het CATCH-blok uitgevoerd.
Zo wordt een uitzondering afgehandeld in Java.
Syntaxis voor het gebruik van `try` en `catch`
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Voorbeeld van een try-catch-blok
Stap 1) Kopieer de volgende code in een editor.
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Stap 2) Sla het bestand op en compileer de code. Voer het programma uit met het commando `java`. JavaUitzondering.
Stap 3) Er wordt een rekenkundige uitzondering (delen door nul) weergegeven voor regel 5, en regel 6 wordt nooit uitgevoerd.
Stap 4) Laten we nu eens bekijken hoe `try` en `catch` ons kunnen helpen deze uitzondering af te handelen. We plaatsen de regel code die de uitzondering veroorzaakt in een `try`-blok. proberen blok, gevolgd door een vangst blok. Kopieer de volgende code in de editor.
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
Stap 5) Sla de code op, compileer deze en voer hem uit. Je krijgt dan de volgende uitvoer.
Zoals u ziet, wordt de uitzondering afgehandeld en wordt de laatste regel code ook uitgevoerd. Merk ook op dat regel 7 niet wordt uitgevoerd omdat zodra er een uitzondering wordt gemaakt, springt de controlestroom naar het catch-blok.
Let op: Het ArithmeticException-object "e" bevat informatie over de opgetreden uitzondering, wat nuttig kan zijn bij het nemen van herstelmaatregelen.
Java Hiërarchie van uitzonderingsklassen
Nadat een catch-instructie is uitgevoerd, worden de andere overgeslagen en gaat de uitvoering verder na het try- en catch-blok. Geneste catch-blokken moeten de uitzonderingshiërarchie volgen, van de meest specifieke subklasse naar de meest algemene bovenliggende klasse.
- Alle uitzonderingsklassen in Java Breid de klasse Throwable uit. Throwable heeft twee subklassen: Error en Exception.
- De Error-klasse definieert de uitzonderingen of problemen die onder normale omstandigheden niet in uw programma zouden moeten voorkomen, bijvoorbeeld geheugenfouten, hardwarefouten of JVM-fouten.
- De Exception-klasse vertegenwoordigt de uitzonderingen die door uw programma kunnen worden afgehandeld, en uw programma kan van deze uitzonderingen herstellen met behulp van try- en catch-blokken.
- Een RuntimeException is een subklasse van de Exception-klasse. Uitzonderingen van dit type vertegenwoordigen niet-gecontroleerde uitzonderingen die optreden tijdens de uitvoering van een programma en die niet tijdens het compileren kunnen worden gedetecteerd. Goede voorbeelden zijn de deling door nul-uitzondering en de null-pointer-uitzondering.
- Tijdens invoer- en uitvoerbewerkingen wordt een IOException gegenereerd.
- InterruptedException in Java Deze fout treedt op tijdens multithreaded bewerkingen wanneer een thread wordt onderbroken.
Voorbeeld: Geneste try- en catch-blokken
Stap 1) Kopieer de volgende code in een editor.
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
Stap 2) Sla het bestand op en compileer de code. Voer het programma uit met het commando. Java Javauitzondering.
Stap 3) Er wordt een ArrayIndexOutOfBoundsException gegenereerd. Wijzig de waarde van int d naar 0. Sla de code op, compileer deze en voer hem uit.
Stap 4) Er moet een ArithmeticException worden gegenereerd.
Stap 5) Verwijder de commentaartekens bij regel 10 tot en met regel 12. Sla de code op, compileer en voer deze uit.
Stap 6) Compilatiefout? Dit komt doordat Exception de basisklasse is van ArithmeticException. Elke uitzondering die door ArithmeticException wordt gegenereerd, kan ook door de Exception-klasse worden afgehandeld. Daardoor krijgt het catch-blok van ArithmeticException nooit de kans om te worden uitgevoerd, wat het overbodig maakt. Vandaar de compilatiefout.
Java Eindelijk Blok
Het laatste blok is uitgevoerd ongeacht of er een uitzondering wordt gemaakt in het try-blok. Het is optioneel Te gebruiken met een `try`-blok. Het `finally`-blok is de juiste plek om resources zoals databaseverbindingen, bestanden of netwerksockets vrij te geven.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Als er een uitzondering optreedt in het try-blok, wordt het finally-blok uitgevoerd nadat het catch-blok is voltooid.
Voorbeeld van een finally-blok
Stap 1) Kopieer de volgende code in een editor.
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
Stap 2) Sla de code op, compileer deze en voer hem uit.
Stap 3) Verwachte output: Het finally-blok wordt uitgevoerd, ook al wordt er een uitzondering gegenereerd.
Stap 4) Wijzig de waarde van variabele d naar 1. Sla de code op, compileer en voer deze uit, en bekijk de uitvoer.
Beste praktijken voor Java uitzondering Handling
Door een paar beproefde regels te volgen, kunt u uw Java Code die robuust, leesbaar en gemakkelijk te debuggen is:
- Vang eerst de meest specifieke uitzondering op, daarna de meer algemene, om de integriteit van de uitzonderingshiërarchie te behouden.
- Vermijd lege catch-blokken. Log in ieder geval de uitzondering, zodat de onderliggende oorzaak nooit verloren gaat.
- Gebruik het finally-blok of probeer met resources om bestanden, sockets en databaseverbindingen vrij te geven.
- Gooi gecontroleerde uitzonderingen alleen wanneer de aanroeper redelijkerwijs kan herstellen, en gebruik ongecontroleerde uitzonderingen voor programmeerfouten.
- Verpak uitzonderingen op laag niveau in een zinvolle zakelijke uitzondering om de API-controle te behouden.tracHet is schoon.
- Negeer InterruptedException nooit stilzwijgend in multithreaded code; herstel in plaats daarvan de interruptvlag.







