Исключительные ситуации

Вопрос 1

Что выведет на консоль следующий код:

try {

System.out.print("a");

throw new IllegalArgumentException();

} catch (RuntimeException e) {

System.out.print("b");

} finally {

System.out.print("c");

}

а. ab
б. ac
в. abc

в. abc

"a" будет выведено в любом случае. Затем будет выброшено исключение IllegalArgumentException.

Это исключение будет поймано catch'ем, так как оно наследует RuntimeException.

Затем будет выполнен блок finally и на консоль будет выведено "c".

Таким образом отработают все инструкции вывода на консоль и итоговый вывод будет "abc".

Вопрос 2

Какое из утверждений правильное?

а. Проверяемые (checked) исключения обычно выбрасываются программистами вручную.
б. Проверяемые (checked) исключения обычно выбрасываются JVM.
в. Проверяемые (checked) исключения обычно выбрасываются и программистами, и JVM.

а. Проверяемые (checked) исключения обычно выбрасываются программистами вручную.

Программируя на Java мы часто пользуемся библиотечными методами, а также вызываем методы классов различных посторонних пакетов, которые мы подключаем к своему проекту.

То и дело вызов того или иного библиотечного (или просто постороннего) метода требует от нас заключить этот вызов в try-catch или пробросить потенциальное проверяемое исключение дальше.

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

Вопрос 2

Какое из утверждений правильное?

а. Непроверяемые (unchecked) исключения обычно выбрасываются программистами вручную.
б. Непроверяемые (unchecked) исключения обычно выбрасываются JVM.
в. Непроверяемые (unchecked) исключения обычно выбрасываются и программистами, и JVM.

в. Непроверяемые (unchecked) исключения обычно выбрасываются и программистами, и JVM.

Столкнувшись с необходимостью поделить на ноль, например, виртуальная машина выбросит соответствующее непроверяемое RuntimeException (java.lang.ArithmeticException: / by zero). Поэтому выбрасывать непроверяемые исключения - обычное дело для JVM.

Тем не менее, это не означает, что все собственные исключения, которые создают программисты являются проверяемыми. Нет. В некоторых ситуациях вполне уместны собственные исключения, унаследованные от RuntimeException и являющиеся непроверяемыми.

Среди стандартных непроверяемых исключений можно выделить java.lang.IllegalArgumentException, которое программисты часто выбрасывают вручную, если в разрабатываемый ими метод могут быть переданы "неправильные" аргументы.

Вопрос 3

Какое из утверждений правильное?

а. Ошибки (error) обычно выбрасываются программистами вручную.
б. Ошибки (error) обычно выбрасываются JVM.
в. Ошибки (error) обычно выбрасываются и программистами, и JVM.

б. Ошибки (error) обычно выбрасываются JVM.

Хотя в коде можно написать инструкцию, которая бы выбросила именно ошибку (то есть наследника java.lang.Error), такой подход считается неправильным и не практикуется.

Только JVM выбрасывает ошибки.