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.

  • ⚠️ Uitzondering gedefinieerd: Een uitzondering is een gebeurtenis tijdens de uitvoering die de standaard uitvoeringsvolgorde onderbreekt en wordt weergegeven als een object dat de foutconditie beschrijft.
  • 🧯 Try-catch-blok: Plaats risicovolle code in een `try`-blok en laat daarop een of meer `catch`-blokken volgen om specifieke uitzonderingstypen op een elegante manier af te handelen.
  • 🔁 Tot slot het gedrag: Het finally-blok wordt altijd uitgevoerd na try en catch, waardoor het ideaal is voor het sluiten van bestanden, sockets of het vrijgeven van andere systeembronnen.
  • ✅ Uitzonderingshiërarchie: Alle uitzonderingen erven van Throwable, dat zich vertakt in Error en Exception, waarbij RuntimeException ongecontroleerde gevallen zoals delen door nul afhandelt.
  • 🧪 Praktische tips: Vang eerst de meest specifieke uitzondering op, vermijd lege catch-blokken, log zinvolle berichten en gebruik meerdere catch-blokken om de code beknopt en onderhoudbaar te houden.

Afhandeling van uitzonderingen Java

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:

  1. Compileertijdfouten
  2. 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.

Java uitzondering Handling

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.

Java uitzondering Handling

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.

Java uitzondering Handling

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.

  1. De normale code gaat in a TRY blok.
  2. De code voor het afhandelen van uitzonderingen wordt in het bestand CATCH blok.

Probeer Catch Block

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.

Probeer Catch Block

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.

Probeer Catch Block

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.

Java Uitzonderingshiërarchie

  • 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.

Veelgestelde vragen

Gecontroleerde uitzonderingen worden tijdens het compileren geverifieerd en moeten worden gedeclareerd of opgevangen, zoals IOException. Niet-gecontroleerde uitzonderingen zijn een uitbreiding van RuntimeException, treden op tijdens de uitvoering en vereisen geen verplichte afhandeling, zoals NullPointerException of ArithmeticException.

Het finally-blok wordt altijd na de try- en catch-blokken uitgevoerd, ongeacht of er een uitzondering is opgetreden of niet. Het is de veiligste plek om resources zoals bestandsdescriptors, databaseverbindingen of sockets vrij te geven, waardoor een schone beëindiging van bewerkingen wordt gegarandeerd.

Het sleutelwoord `throw` wordt binnen een methode gebruikt om daadwerkelijk een uitzonderingsobject te genereren, terwijl `throws` in een methodesignatuur wordt gebruikt om aan te geven dat de methode bepaalde gecontroleerde uitzonderingen aan de aanroeper kan doorgeven voor afhandeling.

Ja. Een `try`-blok kan gevolgd worden door een `finally`-blok zonder een `catch`-blok. Dit patroon wordt gebruikt wanneer de ontwikkelaar ervoor wil zorgen dat de opschooncode wordt uitgevoerd, zelfs als de uitzondering zelf wordt doorgegeven aan de aanroeper.

Ja. AI-gestuurde observatietools analyseren de stack. tracZe analyseren logbestanden en codepaden om te voorspellen waar runtime-uitzonderingen waarschijnlijk zullen optreden. Ze suggereren preventieve controles, bevelen de plaatsing van catch-blokken aan en brengen afwijkingen aan het licht.ping Teams voorkomen crashes voordat ze de productieomgeving bereiken.

AI-assistenten analyseren stack tracZe correleren de fouten met de broncode en suggereren mogelijke oorzaken en oplossingen. Ze genereren try-catch-templates, bevelen verbeteringen in de logging aan en herschrijven zelfs foutieve methoden, waardoor de tijd die ontwikkelaars besteden aan het diagnosticeren van fouten aanzienlijk wordt verkort. Java uitzonderingen.

Vat dit bericht samen met: