Исключения (exceptions) — механизм обработки ошибок в Java. Каждый выбрасываемый объект — это производный класс от Throwable. Есть две основные категории:
Exception, кроме RuntimeException): должны явно обрабатываться или объявляться в сигнатуре метода через throws.RuntimeException): обрабатывать явно не требуется, могут возникнуть в любом месте (например, NullPointerException).Когда использовать?
public void readFile(String path) throws IOException { // Checked exception — требуется обработка Files.readAllLines(Paths.get(path)); } public void divide(int a, int b) { int c = a / b; // Unchecked — ArithmeticException }
Может ли метод, не объявляющий throws, выбросить checked exception?
Ответ: Нет, компилятор не позволит выбрасывать checked exception без объявления в сигнатуре метода (throws). Но unchecked exception может быть выброшено без всякого предупреждения.
void foo() { throw new IOException(); // Ошибка компиляции }
История
В интернет-банке заказчик решил игнорировать обработку
SQLExceptions, используя unchecked-обёртки. Из-за этого при обновлении драйвера невидимые ошибки приводили к рассинхронизации данных.
История
В приложении логирования файл лога оставался заблокированным из-за неуловленного checked exception (
FileNotFoundException), который "потеряли" в цепочке вызовов, ошибка не была обработана вовремя, и приложение не могло больше ничего писать в логи.
История
В торговой платформе команда внедрила глобальный catch(Throwable), чтобы "никогда не падать". В итоге критические unchecked-exceptions маскировались — приложение продолжало работать в неконсистентном состоянии, приводя к сложным багам и потерям данных.