В Java, Exception и Error оба являются подклассами класса Throwable и представляют собой события, нарушающие нормальный ход выполнения программы. Однако между ними есть существенная разница в назначении и обработке.
Exception (исключение):
Exception (но не от RuntimeException). Компилятор проверяет их наличие и требует явной обработки (try-catch) или декларирования (throws). Примеры: IOException, SQLException.RuntimeException или Error. Компилятор не требует их явной обработки. Обычно указывают на логические ошибки в коде. Примеры: NullPointerException, ArrayIndexOutOfBoundsException.Error (ошибка):
OutOfMemoryError, StackOverflowError, VirtualMachineError.Таблица сравнения:
| Аспект | Exception (Исключение) | Error (Ошибка) |
|---|---|---|
| Назначение | Проблемы, связанные с кодом программы или внешней средой | Серьезные проблемы на системном уровне |
| Обработка | Может и должна быть обработана программой (try-catch) | Как правило, не может быть обрабона программой |
| Восстановление | Возможно восстановление после обработки | Обычно невозможно восстановление |
| Тип проблем | Логические ошибки, проблемы ввода-вывода, сетевые ошибки | Проблемы с ресурсами, сбои JVM |
| Проверка компилятором | Для Checked Exceptions требуется явная обработка/декларирование | Не требуется явной обработки/декларирования |
| Примеры | IOException, NullPointerException, SQLException | OutOfMemoryError, StackOverflowError, LinkageError |
Пример Checked Exception:
java
Пример Unchecked Exception:
java
Пример Error:
java