В 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
- критические системные сбои, которые обычно не обрабатываются.