Java 编译器如何理解下面要运行的异常?
此处不抛出NullPointerException。但是,没有捕捉它的捕捉块。看起来IOException正在挤压NullPointerException。你对此有何评论?我不明白Java 编译器如何理解下面要运行的异常?,java,exception,try-catch,try-catch-finally,Java,Exception,Try Catch,Try Catch Finally,此处不抛出NullPointerException。但是,没有捕捉它的捕捉块。看起来IOException正在挤压NullPointerException。你对此有何评论?我不明白 NullPointerException不会在此处抛出 事实上,它是。。。假设代码到达您显式抛出它的语句 但问题是内部的try有一个finally块。在finally块中,您显式抛出一个IOException。这将替换原始异常 该行为在中指定。管理您的示例的文本是: “如果由于抛出值V而导致try块的执行突然完成,则
NullPointerException
不会在此处抛出
事实上,它是。。。假设代码到达您显式抛出它的语句
但问题是内部的try
有一个finally
块。在finally
块中,您显式抛出一个IOException
。这将替换原始异常
该行为在中指定。管理您的示例的文本是:
“如果由于抛出值V
而导致try
块的执行突然完成,则有一个选择:
- 如果
块由于原因finally
而突然完成,则S
语句由于原因try
而突然完成(并且值S
的V
被丢弃和遗忘)throw
看起来,
IOException
正在挤压NullPointerException
有点。然而,我们使用非正式术语挤压来指捕获和忽略异常的实践
那么它在运行时只能处理一个异常
这是正确的。在任何时间点上,每个线程最多只能有一个“突然终止原因”。那么它在运行时只能处理一个异常。谢谢你的回答
try {
Image image = new Image("MyComputer/Documents/Photos/estambul.jpg");
try {
//...
image.print();
throw new NullPointerException();
} finally {
System.out.println("FINALLY");
image.close();
throw new IOException();
}
} catch (IOException ex){
System.out.println("IO_EXCEPTION");
System.out.println(ex.getMessage());
}
System.out.println("THREAD IS CONTINUE");