Во время учебы в OCPJP8 я столкнулся с одним вопросом, на который у меня нет очень четкого ответа. Рассмотрим следующий код:
public class Animals
{
class Lamb implements Closeable
{
public void close()
{
throw new RuntimeException("a");
}
}
public static void main(String[] args)
{
new Animals().run();
}
public void run()
{
try (Lamb l = new Lamb();)
{
throw new IOException();
}
catch (Exception e)
{
throw new RuntimeException("c");
}
}
}
Согласно книге правильный ответ на вопрос "Какое исключение выдаст код?" является «Исключение времени выполнения c без подавленного исключения». Я проверил этот код в Eclipse, и system.out предполагает, что книга верна. Тем не менее, я также немного изменил код и добавил следующий system.out непосредственно перед тем, как выбросить RuntimeException "c"
System.out.println(e.getSuppressed().toString());
и вывод, который я получил из этого system.out:
[Ljava.lang.Throwable;@75da931b
Так что явно есть подавленное исключение. В режиме отладки я также обнаружил, что это подавленное исключение — это то, что хмурится в методе close().
Два вопроса: 1. Почему в консоли нет информации о выброшенном исключении в методе close()? 2. Верен ли ответ, данный книгой?
System.out.println(Arrays.toString(e.getSuppressed()));
, чтобы получить более содержательный вывод… - person Holger   schedule 28.10.2015