— Привет, Амиго!
— Привет, Элли! Как жизнь?
— Отлично, спасибо. А ты как?
— Супер, сегодня утром столько всего нового рассказали.
— Так это же отлично. Не устал?
— Да, есть такое дело. Подустал немного.
— Тогда тебе просто повезло. Потому что хотела тебе сегодня дать большую и сложную тему, но в последний момент передумала и решала рассказать маленькую и легкую.
— Маленькую и легкую? Я готов.
— Сегодня мы с тобой детально разберем тему исключений — Exception.
— Ты про обработку ошибок?
— Считать исключение ошибками – это неверный подход. Исключения больше похожи на отчет о том, «что пошло не так». На основе которого можно предложить альтернативные сценарии действия.
Все дело в методах. Когда ты вызываешь какой-то метод, он гарантированно должен сделать то, для чего его вызвали.
Когда метод по каким-либо причинам не может сделать то, для чего его вызвали, он обязан уведомить об этом вызывающего.
Т.е. самое худшее, что может случиться – это когда метод не выполнил свою работу, и никого об этом не уведомил. Хуже этого не может быть ничего. Это потеря контроля над ситуацией.
Когда ты начинающий программист, тебе кажется, что ты вызываешь методы и они обязательно сделают то, о чем ты их просишь.
Когда ты опытный программист, ты знаешь, что могут быть десятки факторов, которые влияют на выполнение методом своей работы, и возможны очень много различных случаев, когда метод не смог выполнить свою работу.
С точки зрения программиста, если в программе произошел сбой, и она закрылась – это в тысячу раз лучшая ситуация, чем, если в программе произошел сбой, она работает неправильно и пользователь об этом не подозревает.
— Как то, что программа что-то показывает неправильно, может быть хуже, чем, если программа закрылась, и все данные потерялись?
— А с чего ты взял, что программа просто что-то неправильно показывает? Может у нее внутри куча ошибок и все данные твоей работы с ней будут безвозвратно потеряны? Ты 3 часа набирал текст, который не сохранится, потому что на второй минуте работы произошла ошибка.
Когда начинающий программист сталкивается с исключениями, он расстраивается.
Но на самом деле, исключения показывают ему все те сценарии поведения, которые он должен был предусмотреть и не предусмотрел.
Ты можешь не обрабатывать исключения, и тогда — ты плохой программист. Но если твои методы не выкидывают исключений, тогда ты вообще не программист, т.к. так и не понял простой истины:
Метод либо делает то, для чего он написан, либо кидает исключение. Третьего не дано!
— Ладно, верю. Обещаю пользоваться исключениями.
— Отлично. Тогда давай я тебе расскажу про иерархию исключений:
Иерархия исключений базируется на четырех классах.
Самый базовый класс – это Throwable.
От него унаследованы классы Error и Exception.
От Exception унаследован RuntimeException.
Класс Error является базовым классом для ошибок Java-машины, таких как StackOverFlow, OutOfMemory, …
Исправить последствия таких ошибок программа обычно не может, и это приводит к ее завершению.
Действительно, что можно сделать, если для дальнейшей нормальной работы программы не хватает памяти или переполнился стек.
Класс Exception является базовым для всех обычных исключений, которые выбрасываются программой. RuntimeException – это подкатегория исключений Exception, к которым применяются немного другие правила.
— Это какие?
— Как раз сейчас и расскажу.
Как ты, наверное, помнишь, исключения делятся на две категории checked (проверяемые) и unchecked (непроверяемые).
Если метод выкидывает checked исключения, то вызывающий его метод обязан обернуть вызов такого метода в блок try-catch. Ну, или пробросить исключение выше (своему вызывающему), явно указав его в списке throws в сигнатуре метода.
На unchecked такие правила/ограничения не распространяются.
Так вот, все исключения, унаследованные от Exception, считаются checked. Кроме исключений, которые унаследованы от RuntimeException – они unchecked.
— Ага. Вспоминаю, что-то такое мне уже раньше рассказывали.
— Амиго! Иерархию исключений спрашивают на каждом собеседовании. Еще раз – на каждом. Ты должен великолепно знать эту тему.
— Ок. Я еще раз все перечитаю и разберусь. Спасибо, что помогаешь мне, Элли.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ