Исключения в Java: try-catch, finally и свои исключения

Пользователь ввёл буквы вместо числа, файл не нашёлся, сервер не ответил. Хорошая программа не падает в таких ситуациях, а аккуратно их обрабатывает. В Java для этого есть исключения.
Редакция Бинариума
Пишем о профессиях в дизайне, BIM и IT · 7 минут чтения
Из этой статьи вы узнаете:
Что такое исключение
Исключение — объект, который сообщает, что во время выполнения программы произошло что-то непредвиденное. Если его не обработать, программа завершится с ошибкой.
try-catch-finally
try {
int age = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println("Введите число");
} finally {
System.out.println("Проверка завершена");
}- try — код, в котором может возникнуть ошибка.
- catch — что делать, если она возникла.
- finally — выполняется в любом случае, например чтобы закрыть ресурсы.
Для работы с файлами и соединениями удобнее try-with-resources: ресурс закроется автоматически.
try (BufferedReader r = Files.newBufferedReader(path)) {
System.out.println(r.readLine());
}Курс Бинариума
Java-разработчик с нуля — исключения, файлы и тесты
Checked и unchecked
| Тип | Особенность | Примеры |
|---|---|---|
| Checked | Компилятор требует обработать или объявить в throws | IOException |
| Unchecked | Обычно следствие ошибки в коде, обработка не обязательна | NullPointerException, IllegalArgumentException |
| Error | Серьёзные проблемы среды, обычно не обрабатываются | OutOfMemoryError |
Своё исключение
class NotEnoughMoneyException extends RuntimeException {
NotEnoughMoneyException(String msg) { super(msg); }
}
if (balance < amount) {
throw new NotEnoughMoneyException("Недостаточно средств");
}Свои исключения делают код понятнее: по названию сразу ясно, что пошло не так.
Ошибки новичков
- Пустой catch — ошибка «проглатывается», и найти её потом очень сложно.
- Перехват Exception везде — вы ловите и те ошибки, которые не ожидали.
- Исключения вместо условий — проверять, пустой ли список, лучше через if.
Главное
- Исключения сообщают о непредвиденных ситуациях.
- try-catch обрабатывает ошибку, finally выполняется всегда.
- Checked нужно обрабатывать обязательно, unchecked — сигнал об ошибке в коде.
- Никогда не оставляйте catch пустым.
Частые вопросы
Что такое NullPointerException?
Попытка вызвать метод или обратиться к полю у переменной, которая равна null. Самая частая ошибка новичков.
Когда использовать throws?
Когда метод не может сам обработать checked-исключение и передаёт ответственность вызывающему коду.
Курс Бинариума
Java-разработчик с нуля
Пишите программы, которые не падают от первой ошибки пользователя.
- 11 недель обучения
- 10+ практических работ
- Проект на GitHub