Файл: 08 18 28 39 06 38 20 24 31 32 ! 04 10 15 17 37 21 не 01 40 что такое исключение Для чего они нужны Расскажи про иерархию исключений.docx

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

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

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

Добавлен: 18.03.2024

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

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

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

ОК: 03 33 07 05 14 02 22 12 30 09 ! 13 29 25 27 19 23 36 35 11 34 !

08 18 28 39 06 38 20 24 31 32 ! 04 10 15 17 37 21

НЕ: 01 40

=1.Что такое исключение? Для чего они нужны?

+2.Расскажи про иерархию исключений?

+3.В чём разница между проверяемыми исключениями и непроверяемыми? В чём разница с точки зрения синтаксиса и идеологическая при использовании?

+4.Можно ли обработать непроверяемое исключение?

+5.Нужно ли ловить Error исключения?

+6.Как бросить исключение? Можно ли бросить НЕ новое исключение?

+7.Расскажи про информацию, которая находится внутри исключения? Как с ней

работать?

+8.Что такое подавленные исключения? Как достать подавленное исключение?

+9.Какую информацию можно получить из StackTraceElement?

+10.Расскажи про конструкцию try-catch-finally?

+11.Что такое try-with-resources? Как работает эта конструкция?

+12.Расскажи, как правильно ловить исключения?

+13.Иерархия catch блоков

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

+15.Как создать, выбросить, поймать свое исключение?

16.Где возможно вызывать исключения?

+17.Конструкция try-finally?

+18.Можно ли обрабатывать разные исключения в одном блоке catch?
+19.Обязателен ли блок finally? А catch? Когда будет выполнен finally?

+20.Когда не будет выполнен finally(4 случая)? –
+21.Будет ли выполнен finally при Error?
+22.Разница try catch и if Какой return вернется? Из try или finally?

+23.Что если в конструкции try finally вылетело исключение сначала в try а потом в finally? Какое исключение вылетит? Что будет с другим?

+24.Что возвращает getStackTrace()?

+25.Какое правило должно соблюдаться при использовании нескольких блоков catch (с одним try

26.Какое правило должно соблюдаться при попытке поймать несколько исключений в одном catch? – если мы ловим несколько исключений, одно из которых является +27.Зачем создавать свой класс и наследовать его от Exception? – для создания

+28.Что такое ошибка, а что такое исключительная ситуация? – исключительная +29.Что нужно делать программисту, если в коде происходит деление на ноль? – это +30.От каких классов Throwable и его подклассов нельзя наследоваться?

+31.Какую информацию можно получить из StackTraceElement? – 
актуальную. +32.Можно ли так написать try { throw new Object(); }? – это будет ошибкой, т.к. Object +33.Какое назначение класса Throwable

+34.Что происходит если не обработать исключение?
+35.Что такое подавленные исключения?
+36.Как достать подавленное исключение?

+37.Что такое ресурс в конструкции try-with-resources?

+38.Что если исключение вылетело сначала в try, а потом в close в конструкции try-with-recources? Какое исключение вылетит? Что будет с другим?

+39.Когда происходит закрытие ресурса в конструкции try-with-resources если в try возникло исключение: до перехода в catch или после того как catch отработает?

-40.Механизм обработки исключений:


1.Что такое исключение? Для чего они нужны?

Событие, которое возникает во время выполнения программы и прерывает нормальный поток выполнения инструкций. Причины возникновения - Пользователь ввел недопустимые данные / Файл не найден / Потеряно соединение.

Использование исключений в Java позволяет повысить отказоустойчивость программы за счет использования «запасных» путей, отделить логику основного кода от кода обработки исключительных ситуаций за счет использования блоков catch, а также дает нам возможность переложить обработку исключений на пользователя нашего кода с помощью throws.

2.Расскажи про иерархию исключений?

Object->Throwable->Errors,Exception->Exception(RunTimeException/IOException

2.1Чем отличаются исключения от обычных классов?

Исключения должны быть унаследованы от класса Exception или его подкласса RuntimeException

Классы-ошибки, расширяющие класс Error, свидетельствуют о возникновении сложных ситуаций в виртуальной машине Java. Имена классов-ошибок, по соглашению, заканчиваются словом Error. 

Классы-исключения, расширяющие класс Exception, отмечают возникновение обычной нештатной ситуации, которую можно и даже нужно обработать.
3.В чём разница между проверяемыми исключениями и непроверяемыми? В чём разница с точки зрения синтаксиса и идеологическая при использовании? – checked(проверяемые исключение) мы должны или обработать с помощью try/catch или пробросить дальше добавлением в сигнатуру throws. Непроверямые ни обрабатывать ни делать что-либо ещё не нужно.
Можно ловить и checked и unchecked, но ловить unchecked не нужно. Обрабатывать нужно только checked исключения. Unchecked исключения RunTimeException это больше ошибка кода (программиста), которую нужно исправить



4.Можно ли обработать непроверяемое исключение?

Можно, обернув его в блок try-catch,

5.Нужно ли ловить Error исключения?

Технически это сделать можно, но смысла это делать нет. Данные ошибки приводят к невозможности дальнейшей корректной работы программы.

6.Как бросить исключение? Можно ли бросить НЕ новое исключение?

Ключевое слово throw, new и название исключения в скобочках. НЕ новое нельзя, так как исключение – это объект, и мы должны его инициализировать.

7.Расскажи про информацию, которая находится внутри исключения? Как с ней

работать?

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

С помощью методов для обработки исключений, которые находятся в базовом классе Throwable. toString(), getMessage(), printStackTrace()
8.Что такое подавленные исключения? Как достать подавленное исключение?

Подавленное исключение — это исключение, которое выбрасывается, но каким-то образом игнорируется.
Например, мы можем не получить информацию об исключении, вызванным в блоке try в случае если блок finally вызвал своё исключение. В таком случае нам будет необходимо вызвать на объекте второго исключения метод Throwable.addSuppressed() чтобы добавить информацию о первом исключении.
Однако, если речь идёт о try with resource то Подавленные исключения образуются, когда в блоке try генерируется исключение и в методе close() при закрытии ресурса генерируется исключение, в этом случае первое исключение считается главным остальные подавленные.

Так же следует учитывать, что даже если в методе close() будет сгенерировано исключение и оно добавится к подавленным исключениям для блока try, все они заменятся исключением, которое будет сгенерировано блоком finally.

9.Какую информацию можно получить из StackTraceElement?

StackTrace – это стэк (работает по принципу Last In First Out) с вызванными методами во время работы программы. (трассировка стека – это список методов, которые были вызваны до момента, когда в приложении произошло исключение.)


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

Получить информацию можно по индексу элемента массива StackTraceElement.и получить информацию об имени файла, имени модуля, имени класса, имени метода, номер строки. (методы getClassName, getMethodName, getLineNumber и тд)

10.Расскажи про конструкцию try-catch-finally?

Мы пытаемся выполнить код в блоке try

в catch ловим эту ошибку и пишем код что делать при ее возникновении

finally выполняется после обработки try-catch. Finally не будет выполнен если:

-упала JVM, Бесконечный цикл в try-catch, Вызвана команда System.exit

Если исключение выпало в try, а потом в finally, вылетит исключение из Finally, другое исключение будет подавлено.

11.Что такое try-with-resources? Как работает эта конструкция?

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

12.Расскажи, как правильно ловить исключения?

Для того, чтобы поймать исключение используется конструкция try … catch. Перед блоком кода, который порождает исключение пишем слово try и открываем фигурные скобки. После окончания блока закрываем скобки, пишем слово catch, в скобках указываем переменную класса-исключения, открываем скобки и там пишем код, который будет вызываться ТОЛЬКО в случае если метод/методы внутри try породили исключение

13.Иерархия catch блоков

При определении нескольких блоков catch следует руководствоваться правилом обработки исключений от «младшего» к старшему. Т.е. нельзя размещать первым блоком catch (Exception e) {...}, поскольку все остальные блоки catch() уже не смогут перехватить исключение. Помните, что Exception
является базовым классом, поэтому его стоит размещать последним.

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

Это называется multi-catch — многократный перехват. В нём можно перечислить несколько исключений, разделив их знаком | .если мы ловим несколько исключений, одно из которых является родителем другого, то мы должны оставить только родителя, иначе компилятор будет ругаться. Исключения прописываются через разделитель |. Переменная объекта ex (Exception.ex) является final.

15.Как создать, выбросить, поймать свое исключение? – создать свой класс и наследоваться от Exception/RunTimeException в зависимости от того, какую ошибку нужно обработать.
16.Где возможно вызывать исключения? – в классе, методе, в любом блоке try-catch-finally
17.Конструкция try-finally? - В конструкции Try-Finally, инструкция Finally гарантированно выполнится, абсолютно независимо оттого, что произойдет в предложении Try. Однако, предложение Finally фактически не обрабатывает никаких исключений
18.Можно ли обрабатывать разные исключения в одном блоке catch? – можно через знак | (прямая черта)
19.Обязателен ли блок finally? А catch? Когда будет выполнен finally? – конструкция может быть как try/catch так и try/finally (т.е. без catch или finally, но что-то одно обязательно должно быть). Finally будет выполнен всегда, за исключением редких случаев.
20.Когда не будет выполнен finally(4 случая)? –
Если упала JVM,
Бесконеччный цикл в JVM (в блоке try/catch).
Была вызвана команда System.exit,
21.Будет ли выполнен finally при Error? – да, при ошибке типа Error блок finally также будет выполнен
22.Разница try catch и if Какой return вернется? Из try или finally? – если оператор return написан и в try и в finally, то выполнится return в finally
23.Что если в конструкции try finally вылетело исключение сначала в try а потом в finally? Какое исключение вылетит? Что будет с другим? – в случае если исключение вылетело и в try и в finally, то вылетит то, исключение, которое случилось в finally (как и с оператором return). Другое исключение оно просто «проглотит», если не было блока catch.
24.Что возвращает getStackTrace()? – возвращает массив StackTraceElement[] в котором содержатся элементы трассировки стека