В Java и Kotlin (которые используются в Android-разработке) Error и Exception являются подклассами Throwable, но имеют принципиальные различия в использовании и обработке.
Throwable
├── Error
├── Exception
│ ├── RuntimeException (Unchecked Exception)
│ └── Checked Exception (например, IOException)
IOException)RuntimeException и его потомки) - не проверяются компилятором// Пример обработки Exception
try {
val file = File("missing.txt").readText()
} catch (e: IOException) {
// Восстанавливаемся после ошибки
println("File not found")
}
OutOfMemoryError, StackOverflowError, LinkageError// Пример Error (не пытайтесь так делать!)
try {
methodCausingStackOverflow();
} catch (StackOverflowError e) {
// Бессмысленная обработка - программа уже в нерабочем состоянии
}
| Критерий | Exception | Error |
|---|---|---|
| Происхождение | Ошибки приложения | Системные/виртуальной машины |
| Обработка | Должны обрабатываться | Обычно не обрабатываются |
| Проверка | Checked - да, Unchecked - нет | Не проверяются |
| Восстановление | Возможно | Обычно невозможно |
| Примеры | IOException, NullPointerException | OutOfMemoryError, NoClassDefFoundError |
В Android особенно важно:
OutOfMemoryError - вместо этого использовать try-catch для больших операций с памятьюRuntimeException (например, NullPointerException) и проверяемые исключения Exception - это ожидаемые проблемы в работе программы, которые можно обработать, а Error - критические системные сбои, которые обычно не обрабатываются.