Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvPmExSC 355 of 420 menu
◀ ▶

Несколько блоков catch в Java

В одном try может произойти сбой разного типа. Если указать в catch только один тип, остальные исключения не перехватятся и программа остановится.

Решение - несколько блоков catch подряд. Среда выполнения выбирает первый блок, тип которого подходит к возникшему исключению:

try { // risky code } catch (NumberFormatException e) { // handle format } catch (ArithmeticException e) { // handle division }

Пусть метод делит два числа, переданные строками. Ошибка преобразования и деление на ноль обрабатываются разными сообщениями:

public class Main { static void divideStrings(String a, String b) { try { int x = Integer.parseInt(a); int y = Integer.parseInt(b); System.out.println(x / y); } catch (NumberFormatException e) { System.out.println("not a number"); } catch (ArithmeticException e) { System.out.println("division by zero"); } } public static void main(String[] args) { divideStrings("10", "0"); divideStrings("10", "two"); } }

Более конкретный catch ставят выше общего. Если сначала написать широкий тип вроде Exception, до узких типов выполнение может не дойти. В начальных задачах достаточно перечислять нужные типы по одному:

import java.util.ArrayList; import java.util.Arrays; ArrayList<Integer> data = new ArrayList<>(Arrays.asList(1, 2, 3)); String indexStr = "x"; try { int i = Integer.parseInt(indexStr); System.out.println(data.get(i)); } catch (NumberFormatException e) { System.out.println("bad index text"); } catch (IndexOutOfBoundsException e) { System.out.println("bad index value"); }

Дан код:

String left = "8"; String right = "0";

В try преобразуйте обе строки в int и выведите частное первого на второе. Для NumberFormatException выведите "parse", для ArithmeticException выведите "zero".

Дан код:

import java.util.ArrayList; import java.util.Arrays; ArrayList<String> tags = new ArrayList<>(Arrays.asList("a", "b", "c")); String indexText = "9";

В одном try получите индекс из indexText и элемент списка. Отдельными catch обработайте NumberFormatException и IndexOutOfBoundsException разными сообщениями на английском.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить