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 次 |
最近记录: |