kuk*_*kis 6 java exception ocpjp
在我学习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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据书中正确答案的问题"代码会抛出哪个例外?" 是"没有被抑制的异常的运行时异常c".我在Eclipse中检查了这段代码,system.out表明这本书是对的.但是,我还修改了一些代码并在抛出RuntimeException"c"之前添加了以下system.out
System.out.println(e.getSuppressed().toString());
Run Code Online (Sandbox Code Playgroud)
我从这个system.out得到的输出是:
[Ljava.lang.Throwable; @ 75da931b
很明显有一个被抑制的例外.在调试模式下,我还发现这个被抑制的异常是close()方法中的一个.
两个问题:1.为什么控制台中没有关于close()方法抛出异常的信息?这本书的答案是否正确?
抑制的异常 ( RuntimeException-A) 被添加到堆栈跟踪打印输出IOException中的捕获中catch,并从堆栈跟踪打印输出中丢失,因为它没有作为-Ccause的传递RuntimeException。
因此,当RuntimeException从 -C 打印时main,它没有提及 -AIOException或被抑制的RuntimeException-A。
因此,本书的答案是正确的,因为从该方法传播的唯一异常main是RuntimeException-C,没有cause( IOException),并且没有任何抑制的异常(因为它是 on IOException)。
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |