8. Exceptions (Исключения) Flashcards

1
Q

Что должна сделать программа при ошибках?

A
  1. Оповестить пользователя о проблеме и дать возможность выполнить
    другие команды
  2. Дать возможность сохранить данные и благополучно завершить работу
    программы
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Назовите основные виды ошибок?

A

● Ошибка ввода - пользователь может ввести в поле даты строку, которая
не соответствует формату даты
● Сбой оборудования - сетевое соединение может оборваться
● Физические ограничение - места на диске может закончится или не хватит
свободного объема оперативной памяти
● Ошибки программистов - программист должен предвидеть, что
пользователь может в поле даты ввести строку (см. п. 1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое исключение?

A

Исключение (exception)— это событие, которое возникает во время выполнения программы и прерывает нормальный поток выполнения инструкций.
Все исключения в Java являются объектами. Поэтому они могут порождаться не только автоматически при возникновении исключительной ситуации, но и создаваться самим разработчиком.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Назовите иерархию исключений?

A

Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable. Его потомками являются подклассы Exception и Error.

Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемые и предсказуемые. Например, произошло деление на ноль в целых числах.

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

В Java все исключения делятся на два типа: контролируемые исключения (checked) и неконтролируемые исключения (unchecked), к которым относятся ошибки (Errors) и исключения времени выполнения (RuntimeExceptions, потомок класса Exception).

Контролируемые исключения представляют собой ошибки, которые можно и нужно обрабатывать в программе, к этому типу относятся все потомки класса Exception (но не RuntimeException).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Опишите принцип работы конструкции try catch finally?

A
try {
// код, который может потенциально привести к ошибке
} catch (Exception e) {
// код, который должен отрабатывать при возникновении исключения
// Exception
} finally {
// код, который отрабатывает в любом случае, произошло
исключение
// или нет
}
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Опишите особенности класса Error?

A

Исключения, которые не подвластны работе программиста, так как показывает
серьезные проблемы в работе приложения. Согласно спецификации Java
данные ошибки не стоит обрабатывать, так как они связаны с проблемами
работы JVM. Например, исключения такого рода возникают, когда закончилась
память, доступная виртуальной машине. Является непроверяемым
исключением (unchecked).
AbstractMethodError, OutOfMemoryError, StackOverflowError

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Опишите особенности класса Exception?

A

Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемые и предсказуемые. Например, произошло деление на ноль в целых числах. Исключения, которые необходимо обрабатывать, возникающие, например, при ошибках ввода-вывода (IOException), возникающие при выполнении вполне
корректных программ. Являются проверяемым исключением (checked). За исключением класса наследника RuntimeExceptions и его подклассов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Опишите особенности класса RuntimeException?

A
public class RuntimeException extends Exception — базовый класс для ошибок во время выполнения. Относится к необрабатываемым исключениям (uncatched\unchecked). Как сказано в описании класса — это суперкласс, исключения которого могут быть выброшены во время нормальной работы JVM.
Наследник Exception, подкласс исключений, который является непроверяемым
IllegalArgumentException, NullPointerException, ArithmeticException, ArrayindexOutOfBoundsException, ClassCastException, ArraystoreException
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое проверяемое исключение и не проверяемое? Примеры?

A

Все исключительные ситуации делятся на «проверяемые» (checked) и «непроверяемые» (unchecked). Это свойство присуще «корневищу» (Throwable, Error, Exception, RuntimeException) и передается по наследству. Никак не видимо в исходном коде класса исключения.
В дальнейших примерах просто учтите, что— Throwable и Exception и все их наследники (за исключением наследников Error-а и RuntimeException-а) — checked
— Error и RuntimeException и все их наследники — unchecked
checked exception = проверяемое исключение, проверяемое компилятором.

  1. Checked исключения, это те, которые должны обрабатываться блоком catch или описываться в сигнатуре метода. Unchecked могут не обрабатываться и не быть описанными.
  2. Unchecked исключения в Java — наследованные от RuntimeException, checked — от Exception (не включая unchecked).

Checked исключения отличаются от Unchecked исключения в Java, тем что:
1)Наличие\обработка Checked исключения проверяются на этапе компиляции. Наличие\обработка Unchecked исключения происходит на этапе выполнения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Что такое stacktrace? Как он помогает в отладке приложений?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

В каком порядке дожны располагаться catch блоки с разными исключениями?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Расскажите про конструкцию try with resources?

A

если не используем try with resources в блоке finaly пишем закрытие потока

try with resources закрывает поток сам, он должен реализовывать autoclosable

try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
Для поддержки такой функции в Java 7 создали новый класс
java.lang.AutoCloseable. Который связан с конструкцией try-with-resources
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Каким правилам необходимо следовать при наследовании если хотим переопределить метод с исключением?

A

Согласно правилам переопределения методов можно лишь сужать класс исключения. Выбрасываемое исключение переопределённым методом должно быть ниже в иерархии классов, иначе оно не обработается

How well did you know this?
1
Not at all
2
3
4
5
Perfectly