Obsługa wyjątków: try, catch i finally

Wyjatki i petla for-each - Podstawy Javy (Java)

Podstawowe elementy obsługi wyjątków: try - blok kodu, który może generować wyjątki catch - blok obsługujący wyjątki finally - blok wykonywany zawsze throw - rzucanie wyjątku throws - deklaracja wyjątków metody Rodzaje wyjątków: Checked Exceptions (np. IOException) Muszą być obsłużone lub zadeklarowane Dziedziczą z Exception Unchecked Exceptions (np. RuntimeException) Nie wymagają jawnej obsługi Dziedziczą z RuntimeException Dobre praktyki: Obsługuj konkretne wyjątki Używaj try-with-resources dla zasobów Nie ignoruj wyjątków Loguj informacje o błędach Zachowuj hierarchię wyjątków

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    // 1. Podstawowy blok try-catch
    System.out.println("=== Przykład 1: Podstawowy try-catch ===");
    try {
      int result = divide(10, 0);
      System.out.println("Wynik: " + result);
    } catch (ArithmeticException e) {
      System.out.println("Błąd: Nie można dzielić przez zero!");
      System.out.println("Szczegóły błędu: " + e.getMessage());
    }

    // 2. Wiele bloków catch
    System.out.println("\n=== Przykład 2: Wiele bloków catch ===");
    try {
      int[] numbers = {1, 2, 3};
      System.out.println(numbers[5]); // Wyjście poza zakres tablicy
    } catch (ArrayIndexOutOfBoundsException e) {
      System.out.println("Błąd: Nieprawidłowy indeks tablicy!");
    } catch (Exception e) {
      System.out.println("Inny błąd: " + e.getMessage());
    }

    // 3. Try-catch-finally
    System.out.println("\n=== Przykład 3: Try-catch-finally ===");
    Scanner scanner = null;
    try {
      File file = new File("nieistniejacy.txt");
      scanner = new Scanner(file);
      while (scanner.hasNextLine()) {
        System.out.println(scanner.nextLine());
      }
    } catch (FileNotFoundException e) {
      System.out.println("Błąd: Plik nie został znaleziony!");
    } finally {
      System.out.println("Blok finally - wykonywany zawsze");
      if (scanner != null) {
        scanner.close();
      }
    }

    // 4. Try-with-resources
    System.out.println("\n=== Przykład 4: Try-with-resources ===");
    try (Scanner fileScanner = new Scanner(new File("test.txt"))) {
      while (fileScanner.hasNextLine()) {
        System.out.println(fileScanner.nextLine());
      }
    } catch (FileNotFoundException e) {
      System.out.println("Błąd: Nie można otworzyć pliku!");
    }

    // 5. Propagacja wyjątków
    System.out.println("\n=== Przykład 5: Propagacja wyjątków ===");
    try {
      riskyOperation();
    } catch (Exception e) {
      System.out.println("Złapany wyjątek: " + e.getMessage());
    }
  }

  // Metoda rzucająca wyjątek
  public static int divide(int a, int b) {
    return a / b;  // Może rzucić ArithmeticException
  }

  // Metoda propagująca wyjątek
  public static void riskyOperation() throws Exception {
    throw new Exception("Operacja zakończona niepowodzeniem");
  }
}

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu Podstawy Javy · Zaloguj się, aby zapisać postęp na koncie.