В Java и Kotlin исключения делятся на два основных типа: checked (проверяемые) и unchecked (непроверяемые). Это фундаментальное разделение влияет на обработку ошибок в Android-приложениях.
public void readFile() throws IOException { // Обязательно объявляем в сигнатуре
FileReader file = new FileReader("test.txt");
// ...
}
Характеристики:
try-catch, либо объявления в сигнатуре методаIOException, SQLException, ClassNotFoundExceptionОсобенности в Android:
IOException использует runtime исключенияfun divide(a: Int, b: Int): Int {
if (b == 0) throw ArithmeticException() // Не требуется объявлять
return a / b
}
Характеристики:
NullPointerException, ArrayIndexOutOfBoundsException, IllegalArgumentExceptionAndroid-специфика:
ActivityNotFoundException, WindowManager.BadTokenException - типичные примеры| Критерий | Checked Exception | Unchecked Exception |
|---|---|---|
| Проверка компилятором | Да | Нет |
| Наследование | Exception (но не RuntimeException) | RuntimeException |
| Обработка | Обязательна | Опциональна |
| Когда использовать | Восстановимые ошибки | Ошибки программиста/системы |
| Примеры Android | IOException (в старых API) | NullPointerException, IllegalStateException |
Modern Android Development:
IllegalArgumentException для неверных параметров методовОбработка:
// Правильный подход в современном Android
fun loadData() {
try {
networkRequest() // Может бросить unchecked exception
} catch (e: NetworkException) {
showError(e) // Восстановление UI состояния
}
// No need to catch RuntimeExceptions generally
}
Checked exceptions - для предсказуемых ошибок, требующих обязательной обработки, а unchecked - для ошибок, которые часто указывают на баги в коде. В современной Android-разработке предпочтение отдается unchecked подходам.