【发布时间】:2015-10-27 19:24:33
【问题描述】:
在我学习 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 表明这本书是正确的。但是,我也稍微修改了代码,并在抛出 RuntimeException "c" 之前添加了以下 system.out
System.out.println(e.getSuppressed().toString());
我从这个 system.out 得到的输出是:
[Ljava.lang.Throwable;@75da931b
很明显有一个被抑制的异常。在调试模式下,我还发现这个被抑制的异常是 close() 方法中的一个皱眉。
两个问题: 1. 为什么控制台没有关于close()方法抛出异常的信息? 2. 书中给出的答案正确吗?
【问题讨论】:
-
附带说明,使用
System.out.println(Arrays.toString(e.getSuppressed()));获得更有意义的输出...