Исключения. JAVA Flashcards
Что такое исключения?
Событие, которое возникает в ходе программы и прерывает стандартный ход её выполнения.
Исключение в Java – объект, экземпляр класса. Могут порождаться не только автоматически при возникновении исключительной ситуации, но и создаваться самим разработчиком.
Все классы исключений наследуются от Throwable (имеют свойство – возможность быть брошенными через слово throw).
Исключение - недвусмысленый способ сообщить о том, что вызов функции завершился неудачей.
Исключения нужны чтобы уведомить пользователя, о том, что произошла непредвиденная ситуация, на которую следует отреагировать(обработать).
Опишите иерархию исключений.
- класс Throwable (checked)
- от Throwable -> Error (ошибки JVM) и Exception (checked общие)
- от Exception
- > RuntimeException (unchecked)
- > IOException, SQLException, ReflectiveOperationException (checked)
4.RuntimeException (unchecked):
ClassCastException
IndexOutOfBoundException
AritthmeticException
NullPointerException
checked - зависит от программиста, unchecked - от программиста не зависит
Какие типы исключительных ситуаций бывают в Java?
1) Checked Exception - проверяемое, ожидаемое исключение.
2) Runtime Exception - непроверяемое исключение, возникшее в ходе работы программы.(явные ошибки в коде)
3) Error - ошибка на уровне работы виртуальной машины.
Что такое проверяемые исключения (Checked Exceptions)?
Проверяемые исключения (Checked Exceptions) можно еще назвать «ожидаемыми». Как правило, они показывают проблемы, возникающие из-за непредсказуемости внешней стороны: пользователь ввел неверные данные, файл не найден на диске и т.д.
Если метод выбрасывает проверяемое исключение, он обязан об этом объявить при помощи ключевого слова throws.
Проверяемые исключения наследуют класс Exception. Все исключения, кроме ветки RuntimeException - проверяемые.
Что такое непроверяемые исключения (Runtime Exceptions)?
Непроверяемые исключения (Runtime Exceptions) - ошибки в приложении, возникающие во время его работы. Как правило, это результат ошибок в коде: деление на ноль, попытка запросить свойства null-объекта.
checked (контролируемые/проверяемые исключения) должны обрабатываться блоком catch или описываться в сигнатуре метода (например IOException). Наличие такого обработчика/модификатора сигнатуры проверяются на этапе компиляции;
Непроверяемые исключения не требуется декларировать с помощью throws в методе, который их выбрасывает.
Все непроверяемые исключения наследуют класс RuntimeException.
Что такое исключения типа “ошибка” (Error)?
Ошибки (Error) - особые классы исключительных ситуаций, наследующие класс Error. Они связаны с ошибками, возникшими не на уровне приложения, а на уровне виртуальной машины.
Ошибка может возникнуть, например, в случае битого сектора на жестком диске или физических проблем в оперативной памяти, или недостатке памяти.
Можно ли обработать необрабатываемые исключения?
Можно, чтобы в некоторых случаях программа не прекратила работу
Какой оператор позволяет принудительно выбросить исключение?
Это оператор throw:
throw new Exception();
Джошуа Блох пишет, что не стоит явно выбрасывать Exception, Throwable, Error, RuntimeExcseption.
О чем говорит ключевое слово throws?
Модификатор throws прописывается в сигнатуре метода и указывает на то, что метод потенциально может выбросить исключение с указанным типом.
Передаёт обработку исключения вышестоящему методу.
Как создать собственное («пользовательское») исключение?
Необходимо унаследоваться от базового класса требуемого типа исключений (например, от Exception или RuntimeException).
и переопределить методы
Расскажите про механизм обработки исключений в java (Try-catch-finally)
try — данное ключевое слово используется для отметки начала блока кода, который потенциально может привести к ошибке.
catch — ключевое слово для отметки начала блока кода, предназначенного для перехвата и обработки исключений в случае их возникновения.
finally — ключевое слово для отметки начала блока кода, который является дополнительным. Этот блок помещается после последнего блока catch. Управление передаётся в блок finally в любом случае, было выброшено исключение или нет.
Общий вид конструкции для обработки исключительной ситуации выглядит следующим образом:
try { //код, который потенциально может привести к исключительной ситуации }
catch(SomeException e ) { //в скобках указывается класс конкретной ожидаемой ошибки
//код обработки исключительной ситуации}
finally { //необязательный блок, код которого выполняется в любом случае}
Возможно ли использование блока try-finally (без catch)?
try может быть в паре с finally, без catch. Работает это точно так же - после выхода из блока try выполняется блок finally
Такая запись допустима, но смысла в такой записи не так много, всё же лучше иметь блок catch, в котором будет обрабатываться необходимое исключение.
Может ли один блок catch отлавливать сразу несколько исключений?
В Java 7 стала доступна новая языковая конструкция т.н. multi catch, с помощью которой можно перехватывать несколько исключений одним блоком catch:
try {
//…
} catch(IOException | SQLException ex) {
//…
}
Всегда ли выполняется блок finally? Существуют ли ситуации, когда блок finally не будет выполнен?
- Когда System.exit(0) вызывается из блока try.
- Когда JVM исчерпывает память catch (OutOfMemoryError oome) { // do stuff }
- Когда присутствуют прочие критические проблемы с JVM
- Когда ваш Java-процесс принудительно убит из задачи или консоли
- Условие взаимоблокировки потоков в блоке try
- Когда ваш компьютер отключается из-за сбоя питания
- Runtime.getRuntime().exit(0), Runtime.getRuntime().halt(0) и если во время исполнения блока try виртуальная машина выполнила недопустимую операцию и будет закрыта.
- В блоке try{} бесконечный цикл.
Может ли метод main() выбросить исключение во вне и если да, то где будет
происходить обработка данного исключения?
Может и оно будет передано в виртуальную машину Java (JVM).
Для случая с методом main произойдет две вещи:
- будет завершен главный поток приложения;
- будет вызван ThreadGroup.uncaughtException.