Файл: Что такое исключение Для чего они нужны.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.11.2023

Просмотров: 65

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

  • Что такое исключение? Для чего они нужны? 
Событие, которое возникает во время выполнения программы и прерывает нормальный поток выполнения инструкций. Причины возникновения - Пользователь ввел недопустимые данные / Файл не найден / Потеряно соединение.Исключения используются для обработки ошибок и других особых ситуаций.Нужны для продолжения выполнения программы, при возникновении ошибок программирования, неправильного использования API или непредусмотренного поведения пользователя.

  • Расскажи про иерархию исключений?
Класс исключений является подклассом класса ThrowableПомимо класса исключений существует подкласс ошибок (Error), В большинстве случаев Error не нужно обрабатывать (StackOverflowError / OutOfMemoryError)Все классы исключений представляют подтипы класса java.lang.ExceptionКласс исключений делится на два подкласса unchecked и checked: RuntimeException (unchecked) – исключения на этапе выполненияIOException (checked) – другие исключения

  • В чём разница между проверяемыми исключениями и непроверяемыми? В чём разница с точки зрения синтаксиса и идеологическая при использовании?
Checked (проверяемые исключение) мы должны или обработать с помощью try/catch или пробросить дальше добавлением в сигнатуру throws. Непроверямые ни обрабатывать ни делать что-либо ещё не нужно.Unchecked исключения это не ошибки JVM, но RunTimeException это больше ошибка кода (программиста), которую нужно исправить.Встроенные исключения:UncheckedRuntimeExceptionArrayIndexOutOfBoundsException - Индекс массива выходит за пределыClassCastException - Недопустимое приведение типовIllegalArgumentException - Недопустимый аргумент, используемый для вызова методаNullPointerException - Недопустимое использование нулевой ссылкиNumberFormatException - Неверное преобразование строки в числовой форматChecked Exceptions
ClassNotFoundException - КлассненайденNoSuchMethodException - Запрошенный метод не существуетIllegalAccessException - Запрещен доступ к классу.и другие

  • Можно ли обработать непроверяемое исключение?
Да, непроверяемые исключения в Java можно обработать с помощью блока try-catch. Хотя для непроверяемых исключений блок try-catch не является обязательным, иногда может быть полезным обработать такие исключения внутри блока try-catch, чтобы убедиться, что программа не завершится аварийно.Если какой-то метод может выбросить непроверяемое исключение, мы можем заключить вызов этого метода в блок try-catch, чтобы обработать исключение в случае его возникновения. В этом случае, блок catch может содержать код, который исправляет ошибку или предупреждает пользователя об ошибке.Здесь мы попытались обратиться к элементу массива, который не существует, и возникло исключение ArrayIndexOutOfBoundsException. Однако блок catch перехватил это исключение и вывел сообщение об ошибке вместо аварийного завершения программы.

  • Нужно ли ловить Error исключения? 
Ошибка (Error) - возникает на уровне JVM и не может быть обработана программистом (закончилась память в компьютере или переполнен стек – и взять её неоткуда, поэтому и обрабатывать смысла нет)

  • Как бросить исключение? Можно ли бросить НЕ новое исключение? 
Бросить – методом throw new()Да, в Java можно бросить не новое исключение. Это делается с помощью ключевого слова throw. Оно принимает любой экземпляр Throwable (или его производных) - это суперкласс для всех типов исключений.Например, следующая строка кода бросает некоторое уже существующее исключение:throw new IllegalArgumentException("Invalid argument");Где возможно вызывать исключения? В любом месте кода с помощью throw  new Exception();. 

  • Расскажи про информацию, которая находится внутри исключения? Как с ней работать?
Каждый раз, когда при выполнении программы происходит ошибка, создается объект-исключение, содержащий информацию об ошибке, включая её тип и состояние программы на момент возникновения ошибки.

Исключение содержит в себе stacktrace(стектрейс вызовов), т.е. последовательность вызванных методов, а также номер строки, на которой возникла ошибка.Мы можем вызвать массив элементов СтэкТрэйсЭлемент через метод getStackTrace у объекта исключения и получить информацию о классе, методе где было выброшено исключение.Получить информацию можно по индексу элемента массива StackTraceElement.и получить информацию об имени файла, имени модуля, имени класса, имени метода, номер строки. (методы getClassName, getMethodName, getLineNumber и тд)

  • Что такое подавленные исключения? Как достать подавленное исключение?
Если речь идёт о trywithresource то Подавленные исключения (suppressed exception) образуются, когда в блоке try генерируется исключение и в методе close() при закрытии ресурса генерируется исключение, в этом случае первое исключение считается главным остальные подавленные.Так же следует учитывать, что даже если в методе close() будет сгенерировано исключение и оно добавится к подавленным исключениям для блока try, все они заменятся исключением, которое будет сгенерировано блоком finally.С помощью метода Throwable.addSuppressed

  • Какую информацию можно получить из StackTraceElement?
StackTrace – это стэк (работает по принципу LastInFirstOut) с вызванными методами во время работы программы. (трассировка стека – это список методов, которые были вызваны до момента, когда в приложении произошло исключение.)Первым идёт строка с описанием проблемы (название потока, класс ошибки, причина), далее названия методов в порядке вложенности.Получить информацию можно по индексу элемента массива StackTraceElement.и получить информацию об имени файла, имени модуля, имени класса, имени метода, номер строки. (методы getClassName, getMethodName, getLineNumber и тд)

  • Расскажи про конструкцию try-catch-finally?
На стадии разработки программы мы «ограждаем» опасные участки кода в отношении исключений с помощью блока try{}, предусматриваем «запасные» пути с помощью блока catch{}, в блоке finally{} мы пишем код, который выполняется в программе при любом исходе.

  • try – определяет блок кода, в котором может произойти исключение;

  • catch – определяет блок кода, в котором происходит обработка исключения;

  • finally – определяет блок кода, который является необязательным, но при его наличии выполняется в любом случае независимо от результатов выполнения блока try.


  • Что такое try-with-resources? Как работает эта конструкция?
Первоначально он был представлен в Java 7, и вся идея заключалась в том, что разработчику не нужно беспокоиться об управлении ресурсами для ресурсов, которые они используют только в одном блоке try-catch-finally. Это достигается за счет устранения необходимости в finally , которые на практике разработчики использовали только для закрытия ресурсов.Java понимает это так - Ресурсы, открытые в круглых скобках после оператора try, понадобятся только здесь и сейчас. Я вызову их .close() как только закончу работу с блоком try. Если в блоке try возникает исключение, я все равно закрою эти ресурсы.Для работы с несколькими ресурсами, мы можем перечислить их в скобках после try через точку с запятой.Ресурс – это объект класса, реализующего интерфейсы AutoCloseable или Closeable.

  • Расскажи, как правильно ловить исключения? Иерархия catch блоков
Сначала должны идти более специальные блоки обработки исключений, а потом уже более общие.

  • Можно ли одном catch обработать несколько исключений?