Błędy i wyjątki

Typy danych i wyjątki w Javie

Jim White

Java Developer

Wyjątki a błędy

  • Error oznacza poważny problem
  • Aplikacje nie mogą obsługiwać ani odzyskiwać się po błędach
    • Błędy powodują „awarię" lub zatrzymanie aplikacji
    • Przykład: brak pamięci jest błędem w Javie
  • Aplikacje mogą obsługiwać wyjątki i odzyskiwać się po nich
    • Dostęp do elementu poza rozmiarem tablicy to wyjątek.
Typy danych i wyjątki w Javie
Przykładowy błąd
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)
Typy danych i wyjątki w Javie

Dwa typy wyjątków

Wyjątek sprawdzony Wyjątek czasu wykonania („niesprawdzony")
Wymaga obsługi Tak Nie
Ogólna przyczyna Czynniki zewnętrzne Błędy programistyczne
Odzyskiwanie Zwykle możliwe, gdy przewidziane Zazwyczaj niemożliwe
Mechanizm odzyskiwania try/catch lub throws Należy unikać przez staranne kodowanie
Przykład Plik nie znaleziony Indeks tablicy poza zakresem
Typy danych i wyjątki w Javie

Wyjątki sprawdzone i czasu wykonania

  • Podklasy Exception niebędące podklasami RuntimeException to wyjątki sprawdzone
    • Muszą być obsłużone
    • Przykład: plik nie znaleziony (FileNotFoundException)
  • RuntimeException jest nadklasą wszystkich wyjątków niesprawdzonych
    • Nie wymagają obsługi
    • Przykład: dostęp do nieistniejącego indeksu tablicy (IndexOutOfBoundsException)
    • Przykład: dzielenie przez zero (ArithmeticException)
Typy danych i wyjątki w Javie

RuntimeException

Podklasa RuntimeException Opis sytuacji zgłoszenia
ArithmeticException Nieprawidłowe operacje arytmetyczne, np. dzielenie przez 0
IndexOutOfBoundsException Indeks tablicy, String itp. jest poza zakresem
NegativeArraySizeException Próba utworzenia tablicy z ujemnym rozmiarem
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 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/RuntimeException.html
Typy danych i wyjątki w Javie

Wyjątek „sprawdzony"

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 See https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Exception.html
Typy danych i wyjątki w Javie

Czas na ćwiczenia!

Typy danych i wyjątki w Javie

Preparing Video For Download...