Исключения Flashcards

1
Q

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

A

«Исключение» — сокращение от слов «исключительный случай». Это ситуация, в которой программа не может продолжить работу или её работа становится бессмысленной.
Исключения представляют собой объекты, которые позволяют обработать исключительную ситуацию. Исключительная ситуация— это ошибка, происходящая во время выполнения программы (так называемая ошибка времени выполнения).
Исключительные ситуации можно обрабатывать с помощью блока try/catch/finally.

  • Рассмотрим, как он работает. В блок try помещается код, в котором может содержаться исключительная ситуация. Он работает либо до возникновения исключительной ситуации, либо при успешном выполнении до конца блока try.
  • В блоке catch выполняются некие операции при возникновении исключительной ситуации определенного типа (в параметрах блока — в круглых скобках — указывается тип возможного исключения — т.е. класс, который обрабатывает исключительную ситуацию).
    Блок catch может делать все, что угодно: вызывать необходимый класс-исключение при помощи создания его объектов с использованием ключевого слова throw (это фактически искусственная передача выполнения нужному нам блоку catch), а может и сам производить какие-либо действия.
    В блоке finally выполняются определенные восстановительные операции. Он обычно предназначен для освобождения памяти, выделенной под объект. Восстановительные операции будут выполняться независимо от того, возникло исключение (теперь мы будем именно так называть исключительные ситуации) в блоке try или нет.
    Блок finally может отсутствовать.

Конструкция try/catch/finally может быть вложенной.

https://skillbox.ru/media/base/isklyucheniya_v_java_chast_1/

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

Опишите иерархию исключений.

A

Исключения делятся на несколько классов, но все они имеют общего предка — класс Throwable, потомками которого являются классы Exception и Error.
Ошибки (Errors) представляют собой более серьезные проблемы, которые, согласно спецификации Java, не следует обрабатывать в собственной программе, поскольку они связаны с проблемами уровня JVM. Например, исключения такого рода возникают, если закончилась память доступная виртуальной машине.
Исключения (Exceptions) являются результатом проблем в программе, которые в принципе решаемы, предсказуемы и последствия которых возможно устранить внутри программы. Например, произошло деление целого числа на ноль.

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

Расскажите про обрабатываемые и необрабатываемые исключения

A

В Java все исключения делятся на два типа:
● checked (контролируемые/проверяемые исключения) должны обрабатываться
блоком catch или описываться в сигнатуре метода (например throws IOException). Наличие такого обработчика/модификатора сигнатуры проверяются на этапе компиляции;
● unchecked (неконтролируемые/непроверяемые исключения), к которым относятся ошибки Error (например OutOfMemoryError), обрабатывать которые не рекомендуется и исключения времени выполнения, представленные классом RuntimeException и его наследниками (например NullPointerException), которые могут не обрабатываться блоком catch и не быть описанными в сигнатуре метода.

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

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

A

Согласно спецификации Java, не следует пытаться обрабатывать в собственной программе.

Разработчику не предоставлены инструменты для обработки ошибок системы и виртуальной машины. Обрабатывать такие ошибки(Error) не запрещается, но делать этого не рекомендуется.

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

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

A

Это оператор throw: throw new Exception();

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

О чем говорит ключевое слово throws?

A

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

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

Как создать собственное («пользовательское») исключение?

A

Необходимо унаследоваться от базового класса требуемого типа исключений (например от
Exception или RuntimeException).
public class ExcClass extends Exception {

private String someString;
    public ExcClass (String string) {
        this.someString = string;
        System.out.println("Exception ExcClass");
    }
public void myOwnExceptionMsg() {
    System.err.println("This is exception message for string: " + someString);
} }

public class TestExc {

    public static void main(String[] args) {
        try {
            String s = "SomeString";
            throw new ExcClass(s);
        } catch (ExcClass ex) {
            ex.myOwnExceptionMsg();
        }
    }
}
//Вывод
Exception ExcClass
This is exception message for string: SomeString
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Расскажите про механизм обработки исключений в java (Try-catch-finally)

A

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

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

try {

//код, который потенциально может привести к исключительной ситуации

}

catch(SomeException e ) { //в скобках указывается класс конкретной ожидаемой ошибки

//код обработки исключительной ситуации

}

finally {

//необязательный блок, код которого выполняется в любом случае

}

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

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

A

В Java 7 стала доступна новая языковая конструкция, с помощью которой можно перехватывать

несколько исключений одним блоком catch:

try {

//…

} catch(IOException | SQLException ex) {

//…

}

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

Всегда ли выполняется блок finally? ​ Существуют ли ситуации, когда блок finally не будет выполнен?

A

Код в блоке finally будет выполнен всегда, независимо от того, выброшено исключение или нет.

Когда JVM «умирает» - в такой ситуации finally недостижим и не будет выполнен, так как
происходит принудительный системный выход из программы.

System.exit()

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

Может ли метод main() выбросить исключение во вне и если да, то где будет происходить обработка данного исключения?

A

Может и оно будет передано в виртуальную машину Java (JVM).

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

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

A

Если в блоке try возникает исключение, управление выполнением передается соответствующему блоку catch. С одним try может быть связано несколько catch, которые необходимо размещать таким образом, чтобы общий catch обработчика исключений был последним. Универсальный обработчик исключений может обрабатывать все исключения, но вы должны поместить его в конец, если вы поместите его перед перед всеми блоками перехвата, он отобразит общее сообщение.

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

Что такое механизм try-with-resources?

A

try-with-resources , также называемый автоматическим управлением ресурсами , — это новый механизм обработки исключений, представленный в Java 7, который автоматически закрывает ресурсы, используемые в блоке try catch.

Чтобы использовать этот оператор, вам просто нужно объявить необходимые ресурсы в круглых скобках, и созданный ресурс будет автоматически закрыт в конце блока.

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

Что произойдет если исключение будет выброшено из блока catch после чего другое исключение будет выброшено из блока finally?

A

Если не одна функция в стэке вызовов не способна обработать исключение, ошибка выводиться пользователю и программа завершается досрочно.

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

Что произойдет если исключение будет выброшено из блока catch после чего другое исключение будет выброшено из метода close() при использовании try-with-resources?

A

Программа завершится досрочно, произойдет утечка ресурса (не закроется соединение, не будет освобожден файловый дескриптор и т.д.)

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

Какие существуют unchecked exception?

A

Наиболее часто встречающиеся: ArithmeticException, ClassCastException, ConcurrentModificationException, IllegalArgumentException, IllegalStateException, IndexOutOfBoundsException, NoSuchElementException, NullPointerException, UnsupportedOperationException.

17
Q

Что представляет из себя ошибки класса Error?

A

Ошибки класса Error представляют собой наиболее серьёзные проблемы уровня JVM. Например, исключения такого рода возникают, если закончилась память доступная виртуальной машине. Обрабатывать такие ошибки не запрещается, но делать этого не рекомендуется.

18
Q

Что вы знаете о OutOfMemoryError?

A

OutOfMemoryError выбрасывается, когда виртуальная машина Java не может создать (разместить) объект из-за нехватки памяти, а сборщик мусора не может высвободить достаточное её количество.
Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места:
● java.lang.OutOfMemoryError: Java heap space: Не хватает места в куче, а именно, в области памяти в которую помещаются объекты, создаваемые в приложении программно. Обычно проблема кроется в утечке памяти. Размер задается параметрами -Xms и -Xmx.
● java.lang.OutOfMemoryError: PermGen space: (до версии Java 8) Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize.
● java.lang.OutOfMemoryError: GC overhead limit exceeded: Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и сборщик мусора постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit.
● java.lang.OutOfMemoryError: unable to create new native thread: Выбрасывается, когда нет возможности создавать новые потоки.

19
Q

Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?

A

Не совсем. Примитивное поле экземпляра класса хранится не в стеке, а в куче. Любой объект (всё, что явно или неявно создаётся при помощи оператора new) хранится в куче.