В 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
, IllegalArgumentException
Android-специфика:
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 подходам.