为什么在Java中使用不同类型的异常?

为什么在Java中使用不同类型的异常?,java,exception,Java,Exception,如果我的代码抛出异常,我只能捕获java中的一个异常。但是为什么我们需要单独的异常(Nullpointer、classnotfound等)?如果我们只有一个异常而不是不同类型的异常,可以吗?如果我错了,请纠正我 我关于代码的问题如下 class Test { void method(){ try{ // some code.... } catch(Exception e){ } } } 如

如果我的代码抛出异常,我只能捕获java中的一个异常。但是为什么我们需要单独的异常(Nullpointer、classnotfound等)?如果我们只有一个异常而不是不同类型的异常,可以吗?如果我错了,请纠正我

我关于代码的问题如下

class Test {
    void method(){
        try{
            // some code....
        }
        catch(Exception e){

        }
    }
}

如果Java允许我捕获泛型异常,这意味着为什么我们需要不同类型的异常?

因为有时我们需要用不同的异常执行不同的操作

try {
   doSomethingMightThrowException();
} catch (IOException e) {
    reConnect();
} catch (NullPointerException e) {
    createNewConnection();
} catch (IllegalStateException e) {
    doNotCare();
    justContinue();
}

因为有时候我们需要做不同的事情,有不同的例外

try {
   doSomethingMightThrowException();
} catch (IOException e) {
    reConnect();
} catch (NullPointerException e) {
    createNewConnection();
} catch (IllegalStateException e) {
    doNotCare();
    justContinue();
}

最简单的答案是:这取决于你的具体情况。假设您知道可能会遇到两种不同的异常:称它们为
footexception
BarException
。如果您知道当遇到
footexception
时,您想告诉用户,您可能想捕获该异常,添加一些额外的细节,然后重新浏览它。但是,如果您知道不想重新抛出一个
BarException
,那么可以定义一个单独的
catch
子句来单独处理它


因此,总而言之,这实际上取决于您希望如何处理异常。

最简单的答案是:这取决于您的具体情况。假设您知道可能会遇到两种不同的异常:称它们为
footexception
BarException
。如果您知道当遇到
footexception
时,您想告诉用户,您可能想捕获该异常,添加一些额外的细节,然后重新浏览它。但是,如果您知道不想重新抛出一个
BarException
,那么可以定义一个单独的
catch
子句来单独处理它


因此,总而言之,这实际上取决于您希望如何处理异常。

如果您希望以不同的方式处理不同的异常,您必须知道正确的异常。要以不同的方式轻松捕获和处理不同的错误情况,更容易确定到底出了什么问题。如果捕获到一个
NullpointerException
,那么代码已经说明了可能发生的异常。与此相反,如果你只是发现一个
异常
,你不可能知道它是什么类型的,直到它发生。这样看:如果你打电话向某人寻求支持,你完全可以说“我有一个问题!”而不说你的具体问题是什么。这并不意味着更详细的问题描述是无用的。事实恰恰相反。我相信你可以通过阅读和理解中的示例来回答这个问题。如果你想以不同的方式处理不同的异常,你必须知道正确的异常。要以不同的方式轻松捕获和处理不同的错误情况,更容易确定到底出了什么问题。如果捕获到一个
NullpointerException
,那么代码已经说明了可能发生的异常。与此相反,如果你只是发现一个
异常
,你不可能知道它是什么类型的,直到它发生。这样看:如果你打电话向某人寻求支持,你完全可以说“我有一个问题!”而不说你的具体问题是什么。这并不意味着更详细的问题描述是无用的。事实恰恰相反。我相信你可以通过阅读和理解中的例子来回答这个问题