Файл: 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[] в котором содержатся элементы трассировки стека