Java 为什么赢了';t main方法从catch块捕获未捕获的异常
我在学习OCPJP认证模拟考试时想到了这个例子,Java 为什么赢了';t main方法从catch块捕获未捕获的异常,java,exception,exception-handling,nullpointerexception,try-catch,Java,Exception,Exception Handling,Nullpointerexception,Try Catch,我在学习OCPJP认证模拟考试时想到了这个例子, (摘自1.6版考试第3部分,流量控制,问题8) 我完全知道,除非有System.exit(),否则finally块始终会执行,因此我跟踪了程序,并决定它将有如下输出 线程“main”java.lang.NullPointerException中的一个两个异常线程“main”java.lang.NullPointerException中的三个异常线程“main”java.lang.NullPointerException四 然而,事实证明正确的输出
(摘自1.6版考试第3部分,流量控制,问题8) 我完全知道,除非有System.exit(),否则finally块始终会执行,因此我跟踪了程序,并决定它将有如下输出 线程“main”java.lang.NullPointerException中的一个两个异常线程“main”java.lang.NullPointerException中的三个异常线程“main”java.lang.NullPointerException四 然而,事实证明正确的输出是(根据站点和Eclipse调试) 线程“main”java.lang.NullPointerException中的一、二、三、四异常 我不明白的是,catch块中出现的异常在哪里出现了
下面没有catch块,主线程是否也应该抛出它?因为它没有被捕获?该异常实际上会丢失-如果finally块抛出异常,则传播过程中的任何异常都将变得无关,finally块的结果就是新异常 同样,如果您在finally块中返回,那么整个try/catch/finally将永远不会抛出异常 有关详细信息,请参阅。具体而言,各种比特如下所示: 如果finally块由于任何原因突然完成,那么try语句也会因为同样的原因突然完成
好的,我现在正试图理解你复杂的解释:)你能把它放在一个小片段里吗?@cengiscan:你已经有了显示一切的代码。。。如果抛出了一个异常,但是finally块抛出了一个异常,那么第一个异常将丢失。
public class Oak
{
public static void main(String args[])
{
try
{
Integer i =null;
i.toString();
}
catch (Exception e)
{
try
{
System.out.println("One ");
Integer i =null;
i.toString();
}
catch (Exception x)
{
System.out.println("Two ");
Integer i =null;
i.toString();
}
finally
{
System.out.println("Three ");
Integer i =null;
i.toString();
}
}
finally
{
System.out.println("Four ");
}
}
}