Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么赢了';t main方法从catch块捕获未捕获的异常_Java_Exception_Exception Handling_Nullpointerexception_Try Catch - Fatal编程技术网

Java 为什么赢了';t main方法从catch块捕获未捕获的异常

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四 然而,事实证明正确的输出

我在学习OCPJP认证模拟考试时想到了这个例子,
(摘自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 ");
        }
    }
}