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

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

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

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

Добавлен: 10.11.2023

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

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

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

ИСКЛЮЧЕНИЯ

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

Исключение — это проблема(ошибка) возникающая во время выполнения программы. Они нужны чтобы позволить программе обрабатывать нетипичную ситуацию и при этом не прекращать работу.

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

Object – Throwable – Exception/Error – Exception (IOException/RunTimeException)

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

checked(проверяемые исключение) мы должны или обработать с помощью try/catch или пробросить дальше добавлением в сигнатуру throws. Непроверямые ни обрабатывать ни делать что-либо ещё не нужно.

Можно ловить и checked и unchecked, но ловить unchecked не нужно. Обрабатывать нужно только checked исключения. Unchecked исключения RunTimeException это больше ошибка кода (программиста), которую нужно исправить

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

Обрабатывать можно, но делать этого не стоит.

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

Технически, Error как и любой другой Throwable можно поймать в блок catch . Такой код абсолютно валидный и скомпилируется без проблем. На практике, согласно спецификации, значение исключения типа Error – необрабатываемая ошибка, ловить которую нет смысла.

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

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

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

Исключение содержит в себе stacktrace(стектрейс вызовов), т.е. последовательность вызванных функций, а также номер строки, на которой возникла ошибка.

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

Подавленные исключения -это дополнительные исключения, которые возникают в операторе try-with-resources ( введенном в Java 7 ) при закрытии ресурсов AutoCloseable. Поскольку при закрытии ресурсов AutoCloseable может возникнуть несколько исключений, дополнительные исключения присоединяются к основному исключению как подавленные исключения .

Подавленные исключения (suppressed exceptions) - это исключения, которые возникают во время выполнения блока try-with-resources при закрытии ресурсов, однако они не перехватываются и не обрабатываются. Вместо этого они подавляются (suppressed) и сохраняются для последующего анализа.


Вы можете получить подавленные исключения, вызвав метод Throwable.getSuppressed(Throwable e) из исключения, созданного блоком try.

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

актуальную. информация о текущем состоянии «стека вызовов функций» Когда одна функция вызывает другую, Java-машина помещает в этот стек новый элемент StackTraceElement. Когда функция завершается этот элемент удаляется из стека.

getClassName() получить имя класса; getFileName() получить имя файла
getLineNumber() получить номер строки; getMethodName() получить имя метода
hashCode() возвращает хэшкод объекта; isNativeMethod()
toString() возвращает строковое представление объекта

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

Try (попытка): Блок try используется для обозначения участка кода, в котором может возникнуть исключение. Внутри блока try вы помещаете код, который может вызвать исключение.д, который может вызвать исключение }

Catch (перехват): Блок catch используется для перехвата и обработки исключений, которые возникают в блоке try. Вы указываете тип исключения, которое вы хотите обработать, и определяете код, который будет выполнен в случае возникновения такого исключения.

В конструкции Try-Finally, инструкция Finally гарантированно выполнится, абсолютно независимо оттого, что произойдет в предложении Try. Однако, предложение Finally фактически не обрабатывает никаких исключений

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

Конструкцию try-with-resources ввели в Java 7. Она дает возможность объявлять один или несколько ресурсов в блоке try, которые будут закрыты автоматически без использования finally блока. Ресурс это любой объект, класс которого реализует интерфейс java.lang.AutoCloseable или java.io.Closable.

1. Каждый раз, когда ваша Java-программа начинает работать с каким-то файлом на диске, Java-машина запрашивает у операционной системы монопольный доступ к нему. Если ресурс свободен, его захватывает Java-машина. Но после того, как вы закончили работать с файлом, этот ресурс (файл) нужно освободить: уведомить операционную систему

, что он вам больше не нужен. Если вы этого не сделаете, ресурс будет продолжать числиться за вашей программой. 2. У классов, которые используют внешние ресурсы, есть специальный метод для их освобождения — close(). 3. У оператора try-with-resources можно дописывать блоки catch и finally. А можно и не добавлять, если в них нет необходимости. 4. В качестве ресурсов в try-with-resources можно передавать только объекты классов унаследованных от AutoCloseable. Таким образом у этих объектов всегда будет метод close() без параметров.

  • Расскажи, как правильно ловить исключения? Иерархия catch блоков

Первыми должны ловиться наименьшие в иерархии исключения. Иначе будут «недостижимые» исключения, которые никогда не будут выполнены программой. Например сначала ловим filenotfoundexception, а потом IOException

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

можно через знак | (прямая черта)

ДОП ВОПРОСИКИ

Что если в конструкции try finally вылетело исключение сначала в try а потом в finally? Какое исключение вылетит? Что будет с другим? – в случае если исключение вылетело и в try и в finally, то вылетит то, исключение, которое случилось в finally (как и с оператором return). Другое исключение оно просто «проглотит», если не было блока catch.

Что если исключение вылетело сначала в try, а потом в close в конструкции try-with-recources? Какое исключение вылетит? Что будет с другим? - Если исключение будет выброшено в основном коде и в методе close(), то приоритетнее будет первое исключение, а второе исключение будет подавлено, но информация о нем сохранится (с помощью метода Throwable.addSuppressed(Throwable exception), который вызывается неявно Java компилятором

Может ли finally не выполнится? finally недостижим, если происходит системный выход из программы(System.exit). Общими словами: когда jvm умирает, ей не до finally (отсюда можете придумать другие примеры как убить jvm и ответить на вопрос в заголовке).

Какие существуют способы обработки исключений?

В Java есть пять ключевых слов для работы с исключениями:

  1. try — данное ключевое слово используется для отметки начала блока кода, который потенциально может привести к ошибке.

  2. catch — ключевое слово для отметки начала блока кода, предназначенного для перехвата и обработки исключений.

  3. finally — ключевое слово для отметки начала блока кода, которой является дополнительным. Этот блок помещается после последнего блока ‘catch’. Управление обычно передаётся в блок ‘finally’ в любом случае.

  4. throw — служит для генерации исключений.

  5. throws — ключевое слово, которое прописывается в сигнатуре метода, и обозначающее что метод потенциально может выбросить исключение с указанным типом.

Если оператор return содержится и в блоке catch и в finally, какой из них “главнее”? Вернется из блока finally.

Что такое Error? В каком случае используется Error. Приведите пример Error’а.


Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память

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

Можно ли так написать try { throw new Object(); }? – это будет ошибкой, т.к. Object не является исключением, хотя и является родителем Throwable. Вся работа с исключениями начинается с класса Throwable


Какое назначение класса Throwable? - Класс Throwable есть базовым для всех стандартных классов исключений Java. Этот класс предоставляет ряд методов, которые можно использовать или переопределять в собственных классах обработки исключений. Эти классы должны быть унаследованы от класса Exception, который унаследован от класса Throwable