Middle
Opowiedz o mechanizmie wyjątków w Java.
sobes.tech AI
Odpowiedź od AI
W Javie mechanizm obsługi wyjątków jest używany do obsługi błędów i innych sytuacji wyjątkowych, które występują podczas wykonywania programu.
Główne elementy mechanizmu obsługi wyjątków:
- Wyjątek (Exception): Obiekt reprezentujący zdarzenie, które zakłóca normalny przebieg wykonywania programu.
- Bloki
try,catch,finally: Służą do obsługi wyjątków.try: Blok kodu, w którym może wystąpić wyjątek.catch: Blok kodu, który jest wykonywany, jeśli w blokutrywystąpi wyjątek określonego typu.finally: Blok kodu, który zawsze jest wykonywany, niezależnie od tego, czy wystąpił wyjątek, czy nie. Służy do zwalniania zasobów.
- Słowo kluczowe
throw: Używane do jawnego tworzenia i rzucania wyjątku. - Słowo kluczowe
throws: Używane w sygnaturze metody do deklarowania typów wyjątków, które metoda może rzucić.
Hierarchia wyjątków w Javie:
Throwable: Klasa bazowa dla wszystkich wyjątków i błędów.Error: Reprezentuje poważne problemy, z których program zwykle nie może się odzyskać (np.OutOfMemoryError).Exception: Reprezentuje wyjątki, które program może przechwycić i obsłużyć.RuntimeException(Niekontrolowane wyjątki): Wyjątki, które nie wymagają jawnej obsługi lub deklaracji w sygnaturze metody (np.NullPointerException,ArrayIndexOutOfBoundsException).- Sprawdzane wyjątki (Checked Exceptions): Wyjątki, które muszą być obsłużone za pomocą bloku
try-catchlub zadeklarowane za pomocąthrowsw sygnaturze metody (np.IOException,FileNotFoundException).
Przykład obsługi wyjątku:
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = divide(10, 0);
System.out.println("Wynik: " + result);
} catch (ArithmeticException e) {
// Obsługa wyjątku ArithmeticException
System.err.println("Błąd: dzielenie przez zero nie jest dozwolone.");
System.err.println("Szczegóły wyjątku: " + e.getMessage());
e.printStackTrace(); // wyświetla stos wywołań
} finally {
// Ten blok zawsze się wykona
System.out.println("Blok finally wykonany.");
}
}
public static int divide(int a, int b) {
// Może rzucić ArithmeticException, gdy b = 0
return a / b;
}
}
Przykład użycia throws:
import java.io.FileReader;
import java.io.IOException;
public class ThrowsExample {
public static void readFile(String filename) throws IOException {
// Może rzucić IOException
FileReader reader = new FileReader(filename);
// Dalsza praca z plikiem
}
public static void main(String[] args) {
try {
readFile("nieistniejący_plik.txt");
} catch (IOException e) {
System.err.println("Błąd odczytu pliku: " + e.getMessage());
}
}
}