Найти тему
KOTLIN_IT

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

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

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

Например, программа ожидает от пользователя число, а он вводит буквы. В таком случае в процессе выполнения возникнет исключение вида 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 все равно сработает.