Sposoby obsługi wyjątków cz.2

W sytuacjach kiedy nie korzystamy z bloku try-catch a mamy fragment kodu który może wygenerować wyjątek to możemy skorzystać ze słowa throws lub throw. Throws jest stosowane w sygnaturze metody i jeżeli dotyczy on wyjątku kontrolowanego to dodanie tego słowa jest wymagane. W przypadku wyjątków nie kontrolowanych nie to już wymagane. Natomiast słowa throw używany w ciele metody. Będzie ona oznaczało wtedy nieoczekiwane zakończenie działania metody. Obiekt tak wyrzuconego wyjątku może zostać jeszcze złapany w bloku try-catch.

Dla przykładu wyrzucenia wyjątku przestawię prosty kalkulator dzielący dwie liczby typu int. Wyjątek w tej sytuacji może być spowodowany liczą zero ponieważ nie dzielimy przez zero. Posłużyłam się tutaj wyjątkiem ArithmeticException który należny do rodziny wyjątków nie kontrolowanych, jednak zależało mi na przedstawieniu prostego przykładu.

public class Calculator {
 int wynik;

public void divide(int liczba1, int liczba2){
  if(liczba1 == 0 || liczba2 == 0){
   throw new ArithmeticException("Nie dzielimy przez zero");
    }
    else{
    wynik = liczba2 / liczba1;
   }
}

@Override
public String toString(){
   return "wynik " + wynik;   
     }
}

Stworzony więc został obiekt wyjątku ArithmeticException i rzucony przy pomocy instrukcji throw. Tak uruchomiony system wyrzuci wyjątek i zakończy działanie co przedstawia wynik z konsoli poniżej:

Wyrzucenie wyjątku i zakończenia działania aplikacji.

Przejmiemy teraz wyjątek w bloku try-catch. Metoda divide została opakowana blok try catch. Metoda wywołana z argumentem 0 jest nieprawidłowa to obiekt wyjątku ArithmeticException , zostal wyrzucony z metody zostanie teraz przypisany do parametru ex klauzuli catch. Metoda getMessage() pozwala wyciągnąć z obiektu wyjątku wiadomość, którą ustawiliśmy przy wywoływaniu konstruktorów.

public static void main(String[] args) {

  Calculator calculator = new Calculator();
  
    try{
    calculator.divide(0, 2);
   }catch(ArithmeticException ex){
    System.err.println(ex.getMessage());
  }
   System.out.println(calculator);

Wynik można zobaczyć poniżej:

Zakończenie działania aplikacji po wywołanie wyjątku.

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *