Java 是不是;例外情况;捕获异常,即使在catch块中特别提到了该异常?

Java 是不是;例外情况;捕获异常,即使在catch块中特别提到了该异常?,java,exception,Java,Exception,我的问题是,如果存在NullPointerException,它将被NullPointerException捕获块捕获。它也会被异常捕获块捕获吗?我可以使用excep变量获取异常类型吗?否,因为在捕获(异常excep)块上方有一个块专门捕获NullPointerException 一个异常永远不会被多个catch块捕获* 如果删除catch(NullPointerException e)块,那么catch(Exception excep)块也将捕获NullPointerException(因为N

我的问题是,如果存在NullPointerException,它将被NullPointerException捕获块捕获。它也会被异常捕获块捕获吗?我可以使用excep变量获取异常类型吗?

否,因为在
捕获(异常excep)
块上方有一个块专门捕获
NullPointerException

一个异常永远不会被多个catch块捕获*

如果删除
catch(NullPointerException e)
块,那么
catch(Exception excep)
块也将捕获
NullPointerException
(因为
NullPointerException
Exception
的子类)。在这种情况下,您可以使用
excep
变量来检查异常的类型。然而,这将是一种糟糕的做法——最好为特定的异常类型添加一个catch块,而不是测试异常变量的类型


*:除非在
catch(NullPointerException e)
块中重新抛出异常,就像Juan Mendes在他的评论中提到的那样。

您尝试过吗;)30秒。这就是尝试一下并从冰箱里给自己拿一杯可口的饮料所需要的。我没有,对此我很抱歉,但我很匆忙。@bhatianitish这不是StackOverflow的一个好用途,当你不着急的时候回到这个问题上,不要匆忙编写代码;)发布一个问题需要更多的时间。除非你重新抛出它?因此,如果我必须在字符串中存储异常类型,我必须在每个catch块中编写相同的代码,如“string exceptionName=blahblah”?@bhatianitish为什么需要这样做?能够捕获特定类型的异常的全部意义在于,您提前知道它是什么类型。如果您要以完全相同的方式处理所有异常,那么复制和粘贴相同的捕获块4次没有多大意义。。。您可以使用multi-catch:
catch(TimeoutException | SomeOtherException e)
catch(TimeoutException e)
    {
        //something here
    }
catch(SomeOtherException e)
    {
        //something here
    }
catch(NullPointerException e)
    {
        //something here
    }
catch(Exception excep)
    {
        //something here
    }