- ПОЧЕМУ
- Что такое исключение?
- Исключение, которое обычно происходит
- Try/catch для подавления исключения и продолжения работы приложения только с простым сообщением об ошибке.
- Ловля исключения с одновременным созданием подробной трассировки стека
- Заставьте его выбрасывать исключение в случае возникновения ситуации или отсутствия аргумента.
- Бросайте оригинальные исключения в зависимости от условий
- Резюме.
ПОЧЕМУ
Что мы знаем об исключениях?
Я знал только об исключениях, которые нужно создавать на случай, если вы бросите запрос к API, а он не сработает.
Единственное, что я знал об исключениях, это
Что такое исключение?
https://www.udemy.com/course/kotlinmasterclass/learn/lecture/16673664#overview
Я изучил его в мастер-классе по Kotlin на Udemy.
Это то, что возникает, когда случается что-то неожиданное.
После возникновения исключения система не может восстановиться после него.
Трассировка стека, которая дает информацию о том, какая функция выполнялась до Исключения.
Исключение, которое обычно происходит
print("text".toInt())
java.lang.NumberFormatException: For input string: "text"
NumberFormatException выбрасывается, если String установлен в Int.
at com.example.springboot.PersonHandler.getPersons(Resource.kt:18)
В то же время появляется Stacktrace.
Здесь у нас есть информация о том, что ошибка произошла в getPersons в PersonHandler (строка 18 в Resource.kt).
Try/catch для подавления исключения и продолжения работы приложения только с простым сообщением об ошибке.
try {
print("text"?.toInt())
} catch (e: Exception) {
println("Exception Occurred!")
println(e.localizedMessage)
}
Поместите код, который вызывает NumberFormatException, внутрь try.
Если возникает исключение, то выдается локализованное сообщение об этом исключении.
Exception Occurred!
For input string: "text"
Если это localisedMessage, появится минимальное сообщение об ошибке.
Кроме того, приложение обычно завершается при возникновении исключения.
Однако на этот раз Exception перехватывается командой try.
Таким образом, приложение не завершается и может быть выполнена следующая строка.
Ловля исключения с одновременным созданием подробной трассировки стека
catch (e: Exception) {
println("Exception Occurred!")
e.printStackTrace()
println(e.localizedMessage)
}
Если e.printStackTrace включен в catch
При удержании кнопки Exception можно также сгенерировать подробную трассировку стека.
Снова появится знакомый красный текст ошибки.
Если после этого вы напишете finally, он будет работать в любом случае, даже если try сработает или произойдет Error. Вы пишете процесс инициализации или что-то другое?
Заставьте его выбрасывать исключение в случае возникновения ситуации или отсутствия аргумента.
Вы можете бросить оригинальное сообщение об исключении.
throw IllegalStateException("なんかちがう")
java.lang.IllegalStateException: なんかちがう
IllegalStateException — это исключение, которое следует бросать в неподходящих ситуациях.
https://kotlinlang.org/docs/exceptions.html#the-nothing-type
val name = null
name ?: throw IllegalArgumentException("Name required")
java.lang.IllegalArgumentException: Name required
IllegalArgumentException — это исключение, возникающее при неправильном аргументе.
Выбросьте исключение с подходящим для данной ситуации именем!
Бросайте оригинальные исключения в зависимости от условий
Runtime Exception может быть расширен для создания пользовательских ошибок, таких как HogeIdNotFoundException. Требуется верификация.
Бросайте HogeIdNotFoundException(), если HogeId отсутствует.
Резюме.
Когда строка преобразуется в Int или происходит что-то неожиданное
Kotlin выбрасывает исключение, и приложение завершается.
Однако, если вы напишете строку, в которой происходит что-то неожиданное, внутри попытки и поймаете ее в
Если написать неожиданную строку внутри try и перехватить ее в catch, можно продолжить работу без завершения приложения.
С другой стороны, процесс не происходит, когда вы его ловите. Если возникают несоответствия данных, вы можете вывести стектрейс в catch, чтобы потом проверить его в журналах!
Кроме того, если вы выбросите IllegalStateException или IllegalArgumentException в зависимости от условий в UseCase, вы можете завершить приложение до того, как произойдет что-то плохое.
Более того, Runtime Exception может быть расширен, поэтому вам будет проще следить за журналом ошибок, если вы создадите свой собственный оригинальный Exception.