Исключительные ситуации
Вопрос 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 выбрасывает ошибки.