Java-uitzonderingen - Probeer...Catch


Java-uitzonderingen

Bij het uitvoeren van Java-code kunnen verschillende fouten optreden: codeerfouten gemaakt door de programmeur, fouten door verkeerde invoer of andere onvoorziene dingen.

Wanneer er een fout optreedt, zal Java normaal gesproken stoppen en een foutmelding genereren. De technische term hiervoor is: Java zal een exception genereren (een error weggooien).


Java proberen en vangen

Met de tryinstructie kunt u een codeblok definiëren dat moet worden getest op fouten terwijl het wordt uitgevoerd.

Met de catchinstructie kunt u een codeblok definiëren dat moet worden uitgevoerd als er een fout optreedt in het try-blok.

De tryen catchtrefwoorden komen in paren:

Syntaxis

try {
  //  Block of code to try
}
catch(Exception e) {
  //  Block of code to handle errors
}

Beschouw het volgende voorbeeld:

Dit genereert een foutmelding, omdat myNumbers[10] niet bestaat.

public class Main {
  public static void main(String[ ] args) {
    int[] myNumbers = {1, 2, 3};
    System.out.println(myNumbers[10]); // error!
  }
}

De uitvoer zal ongeveer als volgt zijn:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
        at Main.main(Main.java:4)

Als er een fout optreedt, kunnen we gebruiken try...catchom de fout op te vangen en wat code uit te voeren om het af te handelen:

Voorbeeld

public class Main {
  public static void main(String[ ] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    }
  }
}

De uitvoer zal zijn:

Something went wrong.

Eindelijk

Met de finallyinstructie kunt u code uitvoeren na try...catch, ongeacht het resultaat:

Voorbeeld

public class Main {
  public static void main(String[] args) {
    try {
      int[] myNumbers = {1, 2, 3};
      System.out.println(myNumbers[10]);
    } catch (Exception e) {
      System.out.println("Something went wrong.");
    } finally {
      System.out.println("The 'try catch' is finished.");
    }
  }
}

De uitvoer zal zijn:

Something went wrong.
The 'try catch' is finished.


Het worp trefwoord

Met de throwinstructie kunt u een aangepaste fout maken.

De throwinstructie wordt gebruikt in combinatie met een uitzonderingstype . Er zijn veel soorten uitzonderingen beschikbaar in Java: ArithmeticException, FileNotFoundException, ArrayIndexOutOfBoundsException, SecurityException, etc:

Voorbeeld

Geef een uitzondering als de leeftijd onder de 18 is (print "Toegang geweigerd"). Als de leeftijd 18 jaar of ouder is, druk dan "Toegang verleend" af:

public class Main {
  static void checkAge(int age) {
    if (age < 18) {
      throw new ArithmeticException("Access denied - You must be at least 18 years old.");
    }
    else {
      System.out.println("Access granted - You are old enough!");
    }
  }

  public static void main(String[] args) {
    checkAge(15); // Set age to 15 (which is below 18...)
  }
}

De uitvoer zal zijn:

Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at least 18 years old.
        at Main.checkAge(Main.java:4)
        at Main.main(Main.java:12)

Als de leeftijd 20 was, zou u geen uitzondering krijgen:

Voorbeeld

checkAge(20);

De uitvoer zal zijn:

Access granted - You are old enough!

Test jezelf met oefeningen

Oefening:

Voeg de ontbrekende onderdelen in om de fout in de onderstaande code op te lossen.

 {
  int[] myNumbers = {1, 2, 3};
  System.out.println(myNumbers[10]);
}  (Exception e) {
  System.out.println("Something went wrong.");
}