Урок №8. Exceptions (Исключения) Flashcards
Что должна сделать программа при ошибках?
- Оповестить пользователя о проблеме и дать возможность выполнить
другие команды - Дать возможность сохранить данные и благополучно завершить работу
программы
Назовите основные виды ошибок?
●Ошибка ввода - пользователь может ввести в поле даты строку, которая не
соответствует формату даты
● Сбой оборудования - сетевое соединение может оборваться
● Физические ограничение - места на диске может закончиться или не
хватит свободного объема оперативной памяти
● Ошибки программистов - программист должен предвидеть, что
пользователь может в поле даты ввести строку (см. п. 1)
Что такое исключение?
Исключение (exception)— это событие, которое возникает во время выполнения программы и прерывает нормальный поток выполнения инструкций.
Все исключения в Java являются объектами. Поэтому они могут порождаться не только автоматически при возникновении исключительной ситуации, но и создаваться самим разработчиком.
Назовите иерархию исключений?
Исключения делятся на несколько классов, но все они имеют общего предка — класс Serializable->Throwable. Его потомками являются подклассы Exception и Error.
Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемые и предсказуемые. Например, произошло деление на ноль в целых числах.
Ошибки (Errors) представляют собой более серьёзные проблемы, которые, согласно спецификации Java, не следует пытаться обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память, доступная виртуальной машине. Программа дополнительную память всё равно не сможет обеспечить для JVM.
В Java все исключения делятся на два типа: контролируемые исключения (checked) и неконтролируемые исключения (unchecked), к которым относятся ошибки (Errors) и исключения времени выполнения (RuntimeExceptions, потомок класса Exception).
Контролируемые исключения представляют собой ошибки, которые можно и нужно обрабатывать в программе, к этому типу относятся все потомки класса Exception (но не RuntimeException).
Опишите принцип работы конструкции try catch finally?
try { // код, который может потенциально привести к ошибке } catch (исключение e) { // код, который должен отрабатывать при возникновении исключения / / Исключение } наконец { // код, который отрабатывает в любом случае, произошло исключение // или нет }
!!!!! Finalizable не выполнится только если system.exit(0) в try или catch.
Опишите особенности класса Error?
Исключения, которые не подвластны работе программиста, так как
показывают серьезные проблемы в работе приложения. Согласно
спецификации Java данные ошибки не стоит обрабатывать, так как они
связаны с проблемами работы JVM. Например, исключения такого рода
возникают, когда закончилась память, доступная виртуальной машине.
Является непроверяемым исключением (unchecked).
OutOfMemoryError, StackOverflowError
Опишите особенности класса Exception?
Исключения, которые необходимо обрабатывать, возникающие, например, при
ошибках ввода-вывода (IOException), возникающие при выполнении вполне
корректных программ. Являются проверяемым исключением (checked).
FileNotFoundException
Опишите особенности класса RuntimeException?
public class RuntimeException extends Exception — базовый класс для ошибок во время выполнения. Относится к необрабатываемым исключениям (uncatched\unchecked). Как сказано в описании класса — это суперкласс, исключения которого могут быть выброшены во время нормальной работы JVM. Наследник Exception, подкласс исключений, который является непроверяемым IllegalArgumentException, NullPointerException, ArithmeticException, ArrayindexOutOfBoundsException, ClassCastException, ArraystoreException
Что такое проверяемое исключение и не проверяемое? Примеры?
Все исключительные ситуации делятся на «проверяемые» (checked) и «непроверяемые» (unchecked). Это свойство присуще «корневищу» (Throwable, Error, Exception, RuntimeException) и передается по наследству. Никак не видимо в исходном коде класса исключения.
В дальнейших примерах просто учтите, что— Throwable и Exception и все их наследники (за исключением наследников Error-а и RuntimeException-а) — checked
— Error и RuntimeException и все их наследники — unchecked
checked exception = проверяемое исключение, проверяемое компилятором.
- Checked исключения, это те, которые должны обрабатываться блоком catch или описываться в сигнатуре метода. Unchecked могут не обрабатываться и не быть описанными.
- Unchecked исключения в Java — наследованные от RuntimeException, checked — от Exception (не включая unchecked).
Checked исключения отличаются от Unchecked исключения в Java, тем что:
1)Наличие\обработка Checked исключения проверяются на этапе компиляции. Наличие\обработка Unchecked исключения происходит на этапе выполнения.
Что такое stacktrace? Как он помогает в отладке приложений?
Трассировка стека – это список методов, которые были вызваны до момента, когда в приложении произошло исключение, можем отлавливать класс исключения
В каком порядке дожны располагаться catch блоки с разными исключениями?
Общее правило — обрабатывать исключения нужно от частного к общему. Т.е. нельзя поставить в первый блок catch(Exception e) {}, иначе все дальнейшие блоки catch() уже ничего не смогут обработать, т.к. любое исключение будет попадать под ExceptionName extends Exception.
Расскажите про конструкцию try with resources?
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
Для поддержки такой функции в Java 7 создали
новый интерфейс AutoCloseable, который имплементируют все файлы с потоками.
public interface AutoCloseable { void close() throws Exception; }
В блоке catch все потоки уже закрыты.
Каким правилам необходимо следовать при наследовании если хотим переопределить метод с исключением?
Согласно правилам переопределения методов можно лишь сужать класс исключения. Выбрасываемое исключение переопределённым методом должно быть ниже в иерархии классов, иначе оно не обработается