Errors en exceptions

Gegevenstypen en uitzonderingen in Java

Jim White

Java Developer

Exceptions vs. errors

  • Error is een ernstig probleem
  • Apps kunnen errors niet afhandelen of herstellen
    • Errors laten de app crashen of stoppen
    • Voorbeeld: out of memory is een error in Java
  • Apps kunnen exceptions wél afhandelen en herstellen
    • Voorbeeld: elementen buiten de arraygrootte benaderen is een exception.
Gegevenstypen en uitzonderingen in Java
Voorbeeld van een error
import java.util.*;

public class CauseOutOfMemory {
    public static void main(String[] args) {
        List<Long> numbers = new ArrayList<Long>();
        long counter = 0;
        while (true) {
            numbers.add(counter);
            counter++;
        }
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.base/java.lang.Long.valueOf(Long.java:1204)
    at foo/exceptions.CauseOutOfMemory.main(CauseOutOfMemory.java:12)
Gegevenstypen en uitzonderingen in Java

Twee typen exceptions

Checked exception Runtime ("unchecked") exception
Afhandelen vereist Ja Nee
Algemene oorzaak Buiten onze controle Onze programmeerfouten
Herstel Meestal mogelijk als voorzien Vaak niet te herstellen
Herstelmechanisme try/catch of throws Beter voorkomen door goed te coderen
Voorbeeld Bestand niet gevonden Array-index buiten bereik
Gegevenstypen en uitzonderingen in Java

Checked- en runtime-exceptions

  • Exception-subklassen die geen RuntimeException-subklassen zijn, zijn checked exceptions
    • Moeten worden afgehandeld
    • Bijv.: bestand niet gevonden (FileNotFoundException)
  • RuntimeException is de superklasse van alle unchecked exceptions
    • Vereisen geen afhandeling
    • Bijv.: een niet-bestaande array-index benaderen (IndexOutOfBoundsException)
    • Bijv.: delen door nul proberen (ArithmeticException)
Gegevenstypen en uitzonderingen in Java

RuntimeException

RuntimeException-subklasse Wanneer gegooid
ArithmeticException Foute rekensom, zoals delen door 0
IndexOutOfBoundsException Index op array, String, enz. buiten bereik
NegativeArraySizeException Array met negatieve grootte aanmaken
int y = 5/0; // ArithmeticException-veroorzakende code
int[] list = new int[-1];  // NegativeArraySizeException-veroorzakende code
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 Zie https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Gegevenstypen en uitzonderingen in Java

“Checked” exception

public class LoadClass {
    public static void main(String[] args) {
        Class myClass = Class.forName("com.mysql.Driver");
    }
}
LoadClass.java:3: error: unreported exception ClassNotFoundException; 
must be caught or declared to be thrown
                Class myClass = Class.forName("com.mysql.Driver");
                                             ^
1 error
1 Zie https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Gegevenstypen en uitzonderingen in Java

Laten we oefenen!

Gegevenstypen en uitzonderingen in Java

Preparing Video For Download...