Własne wyjątki: checked i unchecked

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

Rodzaje własnych wyjątków: Checked Exceptions (dziedziczą po Exception) Muszą być obsłużone lub zadeklarowane Używane dla przewidywalnych sytuacji wyjątkowych Unchecked Exceptions (dziedziczą po RuntimeException) Nie wymagają jawnej obsługi Używane dla błędów programistycznych Tworzenie własnych wyjątków: Dziedziczenie po odpowiedniej klasie bazowej Implementacja konstruktorów Dodawanie własnych pól i metod Nadpisywanie metod bazowych (getMessage, printStackTrace) Dobre praktyki: Znaczące nazwy klas wyjątków Szczegółowe komunikaty błędów Odpowiedni wybór między checked i unchecked Zachowanie hierarchii wyjątków Dokumentacja rzucanych wyjątków

// Własny wyjątek sprawdzany (checked)
class InvalidAgeException extends Exception {
  public InvalidAgeException(String message) {
    super(message);
  }
}

// Własny wyjątek niesprawdzany (unchecked)
class InvalidEmailFormatException extends RuntimeException {
  public InvalidEmailFormatException(String message) {
    super(message);
  }
}

// Własny wyjątek z dodatkowymi polami
class UserValidationException extends Exception {
  private String fieldName;
  private String value;

  public UserValidationException(String message, String fieldName, String value) {
    super(message);
    this.fieldName = fieldName;
    this.value = value;
  }

  public String getFieldName() {
    return fieldName;
  }

  public String getValue() {
    return value;
  }
}

public class Main {
  public static void main(String[] args) {
    // Przykład użycia własnych wyjątków
    try {
      validateAge(-5);
    } catch (InvalidAgeException e) {
      System.out.println("Błąd wieku: " + e.getMessage());
    }

    try {
      validateEmail("nieprawidlowy@email");
    } catch (InvalidEmailFormatException e) {
      System.out.println("Błąd email: " + e.getMessage());
    }

    try {
      validateUser("", "[email protected]");
    } catch (UserValidationException e) {
      System.out.println("Błąd walidacji: " + e.getMessage());
      System.out.println("Pole: " + e.getFieldName());
      System.out.println("Wartość: " + e.getValue());
    }
  }

  // Metoda rzucająca checked exception
  public static void validateAge(int age) throws InvalidAgeException {
    if (age < 0) {
      throw new InvalidAgeException("Wiek nie może być ujemny: " + age);
    }
    if (age > 150) {
      throw new InvalidAgeException("Nieprawidłowy wiek: " + age);
    }
    System.out.println("Wiek prawidłowy: " + age);
  }

  // Metoda rzucająca unchecked exception
  public static void validateEmail(String email) {
    if (email == null || !email.contains("@") || !email.contains(".")) {
      throw new InvalidEmailFormatException("Nieprawidłowy format emaila: " + email);
    }
    System.out.println("Email prawidłowy: " + email);
  }

  // Metoda rzucająca wyjątek z dodatkowymi informacjami
  public static void validateUser(String name, String email) throws UserValidationException {
    if (name == null || name.trim().isEmpty()) {
      throw new UserValidationException(
        "Pole nie może być puste",
        "name",
        name
      );
    }
    System.out.println("Dane użytkownika prawidłowe");
  }
}

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

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