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));

