Chyby a výjimky

Datové typy a výjimky v Javě

Jim White

Java Developer

Výjimky vs. chyby

  • Error označuje závažný problém
  • Aplikace nemohou chyby zpracovat ani se z nich zotavit
    • Chyby způsobí pád nebo zastavení aplikace
    • Příklad: nedostatek paměti je v Javě chybou
  • Aplikace mohou výjimky zpracovat a zotavit se z nich
    • Přístup mimo hranice pole je výjimkou.
Datové typy a výjimky v Javě
Příklad chyby
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)
Datové typy a výjimky v Javě

Dva typy výjimek

Kontrolovaná výjimka Běhová („nekontrolovaná") výjimka
Vyžaduje zpracování Ano Ne
Obecná příčina Okolnosti mimo naši kontrolu Naše programátorské chyby
Zotavení Obvykle možné, pokud je výjimka očekávaná Obvykle nelze
Mechanismus zotavení try/catch nebo throws Nejlepší je psát kód pečlivě
Příklad výjimky Soubor nenalezen Index pole mimo hranice
Datové typy a výjimky v Javě

Kontrolované a běhové výjimky

  • Podtřídy Exception, které nejsou zároveň podtřídami RuntimeException, jsou kontrolované výjimky
    • Musí být zpracovány
    • Příklad: soubor nenalezen (FileNotFoundException)
  • RuntimeException je nadtřída všech nekontrolovaných výjimek
    • Zpracování není povinné
    • Příklad: přístup k neexistujícímu indexu pole (IndexOutOfBoundsException)
    • Příklad: dělení nulou (ArithmeticException)
Datové typy a výjimky v Javě

RuntimeException

Podtřída RuntimeException Popis situace, kdy je vyvolána
ArithmeticException Neplatná aritmetická operace, např. dělení nulou
IndexOutOfBoundsException Index pole, řetězce apod. je mimo povolený rozsah
NegativeArraySizeException Pokus o vytvoření pole se zápornou velikostí
int y = 5/0; // ArithmeticException causing code
int[] list = new int[-1];  //NegativeArraySizeException causing code
Exception in thread "main" java.lang.ArithmeticException: / by zero
Exception in thread "main" java.lang.NegativeArraySizeException: -1
1 Viz https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Datové typy a výjimky v Javě

„Kontrolovaná" výjimka

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 Viz https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Datové typy a výjimky v Javě

Pojďme cvičit!

Datové typy a výjimky v Javě

Preparing Video For Download...