Типы исключений в Java
У каждого исключения есть тип. В catch
указывают именно тип, чтобы реагировать на
конкретную проблему. Ниже - типы, которые
чаще всего встречаются в начальных задачах.
Исключение NumberFormatException возникает, когда
строку нельзя преобразовать в число. Так бывает
после Integer.parseInt или Double.parseDouble
для текста вроде "abc":
String raw = "12x";
try {
System.out.println(Integer.parseInt(raw));
} catch (NumberFormatException e) {
System.out.println("invalid number");
}
Исключение ArithmeticException связано с недопустимой
арифметикой. Для целых чисел типичный случай -
деление на ноль:
int x = 10;
int y = 0;
try {
System.out.println(x / y);
} catch (ArithmeticException e) {
System.out.println("bad division");
}
Исключение NullPointerException появляется при
обращении к методу или полю через ссылку
null:
String label = null;
try {
System.out.println(label.length());
} catch (NullPointerException e) {
System.out.println("no string");
}
Исключение IllegalArgumentException сигнализирует,
что аргумент метода не подходит по смыслу.
Его часто выбрасывают сами через throw,
когда значение нарушает правило задачи:
public class Main {
static void printPositive(int n) {
if (n <= 0) {
throw new IllegalArgumentException("need positive");
}
System.out.println(n);
}
public static void main(String[] args) {
try {
printPositive(-1);
} catch (IllegalArgumentException e) {
System.out.println("bad argument");
}
}
}
В одном catch указывают один тип. Если
нужно по-разному реагировать на разные сбои,
добавляют несколько блоков catch - это
разберем в следующем уроке.
Дан код:
String input = "9z";
В try получите из input int.
В catch для NumberFormatException
выведите "format".
Дан код:
int numerator = 14;
int denominator = 0;
Вычислите частное в try. При
ArithmeticException выведите "math".