Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java Exception Handling meesteren: Try, Catch, Finally en Resources

Java Exception Handling meesteren

Verken hoe Java's try-catch-finally mechanismen en try-with-resources je helpen robuuste, foutvrije code te schrijven.

Het try…catch construct is centraal voor graceful error handling in Java. Het stelt een programma in staat runtime problemen te anticiperen en te reageren zonder te crashen.

Hieronder is de canonieke syntax:

try { // code die een exception kan throwen } catch (ExceptionType e) { // handle de exception }

Het try blok bevat code die een exception kan throwen. Als een exception optreedt, springt controle naar het matchende catch blok, dat dan adequaat kan reageren.

Voorbeeld: ArithmeticException afhandelen

class Main { public static void main(String[] args) { try { int resultaat = 5 / 0; System.out.println("Deze regel wordt nooit bereikt."); } catch (ArithmeticException e) { System.out.println("Gevangen: " + e.getMessage()); } } }

Uitvoer

Gevangen: / by zero

Hier triggert delen door nul een ArithmeticException. Het catch blok vangt het, wat een programmacrash voorkomt.

Tip: Je kunt het catch blok weglaten als je alleen geïnteresseerd bent in het garanderen dat een finally blok draait, maar een catch kan niet bestaan zonder een voorafgaand try.


Een finally blok gebruiken

Een finally clausule garandeert uitvoering ongeacht of een exception gegooid werd:

class Main { public static void main(String[] args) { try { int resultaat = 5 / 0; } finally { System.out.println("Cleanup acties draaien hier."); } } }

Uitvoer

Cleanup acties draaien hier. Exception in thread "main" java.lang.ArithmeticException: / by zero at Main.main(Main.java:4)

Het finally blok voert uit na het try blok, zelfs wanneer een exception de normale flow onderbreekt.


Try, Catch en Finally combineren

Meest robuuste code gebruikt alle drie clausules om fouten af te handelen, ze te rapporteren, en resources op te schonen. Overweeg dit bestandsafhandelingsvoorbeeld:

import java.io.*; class LijstVanNummers { private int[] lijst = {5, 6, 8, 9, 2}; public void schrijfLijst() { PrintWriter out = null; try { System.out.println("Poging om naar bestand te schrijven."); out = new PrintWriter(new FileWriter("OutputFile.txt")); for (int i = 0; i < 7; i++) { out.println("Waarde op: " + i + " = " + lijst[i]); } } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); } finally { if (out != null) { System.out.println("PrintWriter sluiten"); out.close(); } else { System.out.println("PrintWriter niet geopend."); } } } } class Main { public static void main(String[] args) { new LijstVanNummers().schrijfLijst(); } }

Uitvoer

Poging om naar bestand te schrijven. Exception: Index 5 out of bounds for length 5 PrintWriter sluiten

Merk op dat de array-bounds schending een exception triggert, wat gevangen en gerapporteerd wordt. Het finally blok zorgt dat de PrintWriter gesloten wordt, wat resource leaks voorkomt.

Best practice: Plaats cleanup logica – bestanden, sockets, of databaseverbindingen sluiten – altijd in een finally blok.

Let op: finally draait misschien niet als de JVM exit (bijv. System.exit()), een exception optreedt binnen finally, of de thread abrupt getermineerd wordt.


Meerdere exception typen afhandelen

Een enkel try kan gevolgd worden door meerdere catch clausules, elk afgestemd op een specifieke exception:

class LijstVanNummers { private int[] arr = new int[10]; public void schrijfLijst() { try { arr[10] = 11; } catch (NumberFormatException e) { System.out.println("NumberFormatException: " + e.getMessage()); } catch (IndexOutOfBoundsException e) { System.out.println("IndexOutOfBoundsException: " + e.getMessage()); } } } class Main { public static void main(String[] args) { new LijstVanNummers().schrijfLijst(); } }

Uitvoer

IndexOutOfBoundsException: Index 10 out of bounds for length 10

De runtime probeert eerst de eerste catch; als het niet matcht, gaat het door naar de volgende tot een match gevonden is.


Meerdere exceptions in één clausule vangen (Java 7+)

Java 7 introduceerde de mogelijkheid om exception typen in een enkele catch te combineren, wat duplicatie vermindert:

try { // riskante code } catch (IOException | SQLException ex) { // unified handling }

Gebruik deze feature wanneer verschillende exceptions identiek afgehandeld kunnen worden.


Try-with-resources voor automatische cleanup

Het try-with-resources statement sluit automatisch elke resource die AutoCloseable implementeert:

try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt"))) { // gebruik de resource } catch (IOException e) { // handle I/O fouten }

Omdat de resource gedeclareerd is binnen de haakjes, wordt het automatisch gesloten wanneer het blok verlaat, zelfs als een exception optreedt.

Voor diepere inzichten, verken de officiële Java documentatie over try-with-resources.

Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  4. Java Strings beheersen: aanmaken, methodes en best practices
  5. Java interfaces meesteren: concepten, implementatie en best practices
  6. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  7. Java Exception Handling meesteren: Try, Catch, Finally, Throw & Throws uitgelegd
  8. Multi-exception handling in Java meesteren
  9. Java Try-with-resources meesteren: automatische resource management uitgelegd
  10. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  11. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid