Найти в Дзене
KOTLIN_IT

Урок №22 по Котлин. Обработка исключений

При выполнении программы могут возникать ситуации, мешающие программе выполняться дальше. Такие ошибки обычно называют исключениями. Другими словами, возникает исключительная ситуация. В теории ее быть не должно, но по каким-то причинам она возникла. Программист должен уметь предвидеть такие ошибки и закладывать в программу логику их обработки. Например, программа ожидает от пользователя число, а он вводит буквы. В таком случае в процессе выполнения возникнет исключение вида NumberFormatException, и программа завершится. В примере на скрине программа прерывается при попытке преобразовать строку в число с помощью функции toInt(). До суммирования и вывода числа на экран дело не доходит. Для обработки исключений в языках программирования предусмотрена специальная конструкция. В случае Kotlin это try-catch. В ветке try мы пытаемся выполнить какое-то действие, которое потенциально может привести к выбросу исключения. Если этого не происходит, то тело try выполняется полностью. Ветку catch

При выполнении программы могут возникать ситуации, мешающие программе выполняться дальше. Такие ошибки обычно называют исключениями.

Другими словами, возникает исключительная ситуация. В теории ее быть не должно, но по каким-то причинам она возникла. Программист должен уметь предвидеть такие ошибки и закладывать в программу логику их обработки.

Например, программа ожидает от пользователя число, а он вводит буквы. В таком случае в процессе выполнения возникнет исключение вида NumberFormatException, и программа завершится.

-2

В примере на скрине программа прерывается при попытке преобразовать строку в число с помощью функции toInt(). До суммирования и вывода числа на экран дело не доходит.

Для обработки исключений в языках программирования предусмотрена специальная конструкция. В случае Kotlin это try-catch.

В ветке try мы пытаемся выполнить какое-то действие, которое потенциально может привести к выбросу исключения. Если этого не происходит, то тело try выполняется полностью. Ветку catch поток выполнения игнорирует.

Если же в try происходит исключительная ситуация, поток выполнения программы тут же прерывает выполнение тела try и уходит в ветку catch, где это исключение обрабатывается.

Другими словами, происходит перехват, ловля исключения. Программа не дает ему "выйти наружу".

Посмотрим как это работает в случае нашей программы.

-3

Если выражение a.toInt() выбросит исключение, то до прибавления числа 10 и присвоения результата переменной b дело не дойдет. Произойдет переход в ветку catch, где b будет просто присвоено число 10.

Существует большое количество исключений, у каждого из них есть свой тип-класс. Однако все эти классы объединены в общий класс – Exception. Если в заголовке catch в круглых скобках указана переменная типа Exception, данный блок catch будет перехватывать все виды исключений.

Другими словами, инструкцию try-catch можно расширить до try-cat
ch-catch-…

В обработчике исключений try-catch также может быть ветка finally, которая всегда идет последней. Тело finally содержит код, который выполняется всегда, независимо от возникших обстоятельств. Было ли исключение, не было ли его и весь try выполнился полностью, не важно; finally все равно сработает.