Во время учебы в OCPJP8 я столкнулся с одним вопросом, который не имеет однозначного ответа на меня. Рассмотрим следующий код:Исключение исключения выполнения в Closable.close()
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 «с»
System.out.println(e.getSuppressed().toString());
и выход я получил от этого System.out является:
[Ljava.lang.Throwable; @ 75da931b
Так ясно есть подавляются исключение. В режиме отладки я также обнаружил, что это исключенное исключение - это тот, кто хмурится в методе close().
Два вопроса: 1. Почему в консоли нет информации об исключении, отправленном методом close()? 2. Правильно ли ответ, указанный в книге?
В качестве примечания стороны используйте 'System.out.println (Arrays.toString (e.getSuppressed()));' для получения более значимого результата ... – Holger