Sposoby obsługi wyjątków

Dana metoda która znajduje się bloku try może być bardziej skomplikowana i wywołać kilka rodzajów wyjątków. Aby można było je wszystkie obsłużyć można zastosować blok try multi-catch . Dzięki temu każdy rodzaj wyjątku może zostać obsłużony w inny sposób niż pozostałe. Do przedstawienie posłużę się poprzednim przykładem rozbudowanym o ArrayIndexOutOfBoundsException.

Tak więc użytkownik może podać teraz 2 cyfry które powinny być zapisane do tabeli. W następnym etapie użytkownik wskazuje indeks liczby która powinna się wyświetlić na konsoli.

Scanner input = new Scanner(System.in);
  System.out.println("Wpisz cyfrę: ");
  int number[] = new int[2];
  try {
     System.out.println("Podaj liczbę nr 1:");
     number[0] = input.nextInt();
     System.out.println("Podaj liczbę nr 2:");
     number[1] = input.nextInt();

 System.out.println("Którą liczbę wyświetlic?: 1 czy 2?");
 System.out.println(number[input.nextInt() - 1]);
       
  } catch (InputMismatchException ex) {
    System.err.println("Nie wprowadziełeś cyfry");
    System.out.println(ex);
  } catch (ArrayIndexOutOfBoundsException ex) {
  System.err.println("Podałes za za wysoki indekx.");
  System.out.println(ex);
    }
 System.out.println("Podałeś: " + Arrays.toString(number));
 input.close();
}

W tym przykładzie długości tablicy została pomniejszona o 1 aby uzytkownik mógł liczyć indeksy od 1 a nie od 0. W sytuacji gdy uzytkownik poda za wysoką wartość indeksu np 3 zostanie złapany wyjątek mówiący o przekroczeniu dostępnych indeksów w tablicy. Ponadto informacja „Podałeś: [3, 3]” jest wyświetlona ponieważ program pomimo zaistniałego wyjątku zdołał zakończyć dzianie. Co prawda nie wyświetla liczby wskazanej przez użytkownika ale wyświetla zawartość tablicy.

Do bloku try-catch można jeszcze dodać blok finally – cześć która wykona się zawsze. nie zależnie od tego czy wyjątek wystąpił czy nie. Ta sekcja jest wykorzystywana do zamykania strumieni Input/Output.

//caly wczesniejszy kod.
} finally {
   input.close();
}
System.out.println("Podałeś: " + Arrays.toString(number));

Leave a Comment

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