Файл: Исключение это ошибка, возникающая во время выполнения программы. Используя подсистему обработки исключений Java, можно контролировать реакцию программы.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.10.2024
Просмотров: 3
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
-
Что такое исключения? Для чего они нужны?
Исключение – это ошибка, возникающая во время выполнения программы.
Используя подсистему обработки исключений Java, можно контролировать реакцию программы на появление ошибок в ходе ее выполнения.
-
Расскажи про иерархию исключений.
Висключения представлены отдельными классами. Все классы исключений являются потомками класса Throwable. Так, если в программе возникнет исключительная ситуация, будет сгенерирован объект класса, соответствующего определенному типу исключения. У класса Throwable есть два подкласса: Exception и Error.
Исключения типа Error относятся к ошибкам, возникающим в виртуальной машине Java, а не в программе. Контролировать такие исключения невозможно, поэтому реакция на них в прикладной программе, как правило, не предусматривается.
Ошибки, связанные с выполнением действий в программе, представлены отдельными подклассами, производными от класса Exception (пр. деления на ноль, выхода за границы массива и обращения к файлам). Подобные ошибки следует обрабатывать в самой программе. Важным подклассом, производным от Exception, является класс RuntimeException, который служит для представления различных видов ошибок, часто встречающихся при выполнении программ.
-
В чём разница между проверяемыми исключениями и непроверяемыми? В чём разница с точки зрения синтаксиса и идеологическая при использовании?
Проверяемые исключения – это исключения, на которые разработчик обязан отреагировать, т.е написать обработчики, и наличие этих обработчиков будет проверено на этапе компиляции. Код не будет скомпилирован, если какое-то проверяемое исключение не обработано, компилятор этого не допустит. (Throwable, Exception)
Непроверяемые исключения – это исключения времени выполнения. Компилятор не будет от вас требовать обработки непроверяемых исключений. (RuntimeException, Error)
Checked исключения отличаются от Unchecked исключения в Java, тем что:
Наличие\обработка Checked исключения проверяются на этапе компиляции.
Наличие\обработка Unchecked исключения происходит на этапе выполнения.
Checked исключения, это те, которые должны обрабатываться блоком catch или описываться в сигнатуре метода.
Unchecked могут не обрабатываться и не быть описанными.
-
Можно ли обработать непроверяемое исключение?
Обрабатывать можно, но делать этого не стоит. Разработчику не предоставлены инструменты для обработки ошибок системы и виртуальной машины.
-
Нужно ли ловить Error исключения?
Технически, Error как и любой другой Throwable можно поймать в блок catch. Такой код абсолютно валидный и скомпилируется без проблем.
-
Как бросить исключение? Можно ли бросить НЕ новое исключение?
Throw (экщемпляр Exception)
Можно (создать экземпляр в классе Exception и бросить его)
-
Расскажи про информацию, которая находится внутри исключения? Как с ней работать?
- Причина ошибки(cause);
- Возможно, присутствует сообщение об ошибке;
- StackTrace - список методов, которые были вызваны до момента, когда в приложении произошло исключение;
- Список подавленных исключений.
Мы видим название исключения, которое произошло. Так же часто присутствует сообщение, где описывается, что мы сделали не так.
А в StackTrace мы видим, где конкретно произошла ошибка.
-
Что возвращает getStackTrace()?
Используя метод getStackTrace() можно получить массив элементов StackTraceElement, каждый из которых содержит информацию об одном методе. Все элементы вместе и образуют stack trace.
Какую информацию можно получить из StackTraceElement?
StackTraceElement хранит информацию по одному элементу stack trace — т.е. по одному методу из StackTrace. Используется как массив элементов StackTrace.
Стек — это структура хранения данных, в которую можно добавлять элементы и из которой можно забирать элементы. Причем брать элементы можно только с конца: сначала последний добавленный, потом — предпоследний, и т.д.
-
Что такое подавленные исключения? Как достать подавленное исключение?
Подавленное исключение – это исключение, которое выбрасывается, но каким-то образом игнорируется. Часто в Java – это когда блок finally создает исключение, а любое исключение, первоначально возникшее в блоке try , подавляется.
Получить доступ к подавленному исключению возможно, например, если использовать метод addSuppressed() в блоке finally и передать в качестве параметра исходное исключение из блока catch через промежуточную переменную, чтобы исключение не потерялось.
-
Какую информацию можно получить из StackTraceElement?
StackTraceElement хранит информацию по одному элементу stack trace — т.е. по одному методу из StackTrace.
Используется как массив элементов StackTrace.
-
Расскажи про конструкцию try-catch-finally?
try – определяет блок кода, в котором может произойти исключение;
catch – определяет блок кода, в котором происходит обработка исключения;
finally – определяет блок кода, который является необязательным, но при его наличии выполняется в любом случае независимо от результатов выполнения блока try.
Можно ли обрабатывать разные исключения в одном блоке catch?
• Можно, с помощью оператора “или” «|» необходимые исключения: catch( IOException | SQLException ex )
Обязателен ли блок finally? Конструкция try-finally
• Оператор finally не обязателен, однако каждый оператор try требует наличия либо catch, либо finally.
А catch?
• Catch обязателен ели нет finally. Такая запись допустима, если имеется связка try finally. Но же лучше иметь блок catch в котором будет обрабатываться необходимое исключение.
Когда будет выполнен finally?
• Код в блоке finally будет выполнен всегда. За исключение нескольких случаев.
Когда не будет выполнен (4 случая)?
- Если вы вызываете System.exit();
- Если сначала произойдет сбой JVM;
- Если JVM достигает бесконечного цикла (или другого не прерывающегося, не заканчивающегося оператора) в блоке try или catch;
- Если ОС принудительно завершает процесс JVM специально или из-за ошибки, например: сбой питания, аппаратная ошибка итп.
Разница try catch и if
-
В if нельзя поймать и обработать ошибки, просто проверить условие; -
Исключения позволяют сделать код чище и понятнее, поскольку с их помощью можно разделить выполнение действий и обработку ошибок.
-
Что такое try-with-resources? Как работает эта конструкция?
try (Класс имя = new Класс())
{
Код, который работает с переменной имя
}
Try-with-resources – это еще одна разновидность оператора try. После ключевого слова try нужно добавить круглые скобки, а внутри них — создать объекты с внешними ресурсами. Для объекта, указанного в круглых скобках
, компилятор сам добавит секцию finally и вызов метода close().
Что такое ресурс в конструкции try-with-resources?
- Ресурсом называется объект, являющийся экземпляром класса, который реализует интерфейс java.lang.AutoCloseable или java.io.Closable
- Можно указывать несколько ресурсов разделяя их точкой с запятой.
Закрываться эти ресурсы будут в порядке, обратном их объявлению.
- Возможно использование в try-блоке ресурсы, объявленные вне try-блока.
- Ресурс становится final и его нельзя изменить.
При выходе из блока try-with-resources будет вызван метод close() и освобождены все ресурсы.
Что если исключение вылетело сначала в try, а потом в close в конструкции try-with-recources?
Брошенное try-блоком исключение имеет больший приоритет, чем исключения, получившиеся во время закрытия.
В конструкции try-finally наоборот, исключение из finally перекроет исключение в try.
Какое исключение вылетит?
Исключение в try перекроет исключение в close
Что будет с другим?
Исключение будет подавленно, и его можно получить через метод getSuppress.
Когда происходит закрытие ресурса в конструкции try-with-resources если в try возникло исключение: до перехода в catch или после того, как catch отработает?
catch и явный finally выполняются уже после того, как закрываются ресурсы в неявном finally(ментор сказал в неявном try catch), который компилятор сам неявно создаёт.
-
Расскажи, как правильно ловить исключения? Иерархия catch блоков
В Java исключения ловят и обрабатывают с помощью конструкции try/catch/finally.
При заключении кода в один или несколько блоков try указывается потенциальная возможность выбрасывания исключения в этом месте, все операторы, которые могут сгенерировать исключение, помещаются в этом блоке.
В блоках catch перечисляются исключения, на которые решено реагировать. Тут определяются блоки кода, предназначенные для решения возникших проблем. Это и есть объявление тех самых получателей/обработчиков исключений.
Иерархия
Порядок объявления в блоке catch должен быть от низкого наследника к более высокому, если исключения наследуются друг от друга.
-
Как создать, выбросить, поймать свое исключение?
Необходимо создать класс и унаследоваться от базового класса требуемого типа исключений (например, от Exception или RuntimeException). Руководствоваться нужно определением типа исключения. В зависимости от того, что необходимо обрабатывать.
В конструкторе класса своего исключения можно передать в конструктор базового класса исключения (например Exception) сообщение об ошибке используя ключевое слово super(message).
Что бы в дальнейшем использовать свое исключение, нужно воспользоваться ключевым словом throws с названием исключения в строке объявления метода после скобок с параметрами. И сгенерировать исключение с помощью оператора throw: throw new имя исключения, внутри метода.
Поймать исключение можно через try catch, указывав в блоке catch имя исключения.
-
Где возможно вызывать исключения?
В любом месте кода с помощью throw new Exception();.
-
Какие есть уровни логирования и для чего они нужны?
Уровни журналов используются для классификации их по степени серьезности или влиянию на стабильность приложения.
- SEVERE (серьезные ошибки программы)
- WARNING (предупреждение)
- INFO (информационное сообщение)
- CONFIG (конфигурационные параметры) (детальное логирование)
- FINE (сообщение об успешной операции)
- FINER
- FINEST
- OFF(отключить)
- ALL(записывать все)
-
Обязательно ли передавать в метод getLogger() имя класса?
Нет не обязательно, можно передать любой строковый параметр. Но желательно.
Почему так принято?
- Легко проверить класс ведения журнала, так как имя журнала будет отображаться в файле журнала. Можно быстро перейти к определенному классу.
- Не нужно беспокоиться о дублировании имен журналов в сложном приложении. Имя всегда будет уникальным.
-
Сообщения каких уровней мы увидим, задав уровень INFO?
- SEVERE (серьезные ошибки программы)
- WARNING (предупреждение)
- INFO (информационное сообщение)
-
Как Java понимает какой уровень главнее при установке .setLevel().
В классе Level первым параметром идет строковое название уровня логирования, а вторым параметром int значение приоритета. У уровня info приоритет 800 у warning 900, чем больше значение, тем выше приоритет.