Ошибки, исключения и отладка
Карта раздела:
- Работа с исключениями в Java — checked/unchecked,
try,catch,finally; - Работа с исключениями в Java — собственный тип, причина и
try-with-resources; - Исключения в блоке инициализации — ошибка класса и конструктора;
- Логирование Java — контекст, уровни и stack trace;
- IntelliJ IDEA — debugger и воспроизводимость;
- Контроллеры Spring — перевод ошибки на HTTP-границе.
try {
return repository.load(id);
} catch (SQLException error) {
throw new StorageException("Cannot load record " + id, error);
}Исключение переводится на границе слоя, но исходная причина сохраняется. Нельзя одновременно залогировать одну ошибку во всех слоях: это создаёт дубли без нового контекста.
Быстрая проверка
Когда ловить исключение? Когда здесь можно восстановиться, добавить контекст или перевести контракт.
Почему нельзя делать пустой catch? Система продолжает работу с потерянной причиной и, возможно, неверным состоянием.
Что закрывает несколько ресурсов в try-with-resources? В обратном порядке; дополнительные ошибки становятся suppressed.