为什么在Java中使用不同类型的异常?
如果我的代码抛出异常,我只能捕获java中的一个异常。但是为什么我们需要单独的异常(Nullpointer、classnotfound等)?如果我们只有一个异常而不是不同类型的异常,可以吗?如果我错了,请纠正我 我关于代码的问题如下为什么在Java中使用不同类型的异常?,java,exception,Java,Exception,如果我的代码抛出异常,我只能捕获java中的一个异常。但是为什么我们需要单独的异常(Nullpointer、classnotfound等)?如果我们只有一个异常而不是不同类型的异常,可以吗?如果我错了,请纠正我 我关于代码的问题如下 class Test { void method(){ try{ // some code.... } catch(Exception e){ } } } 如
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
,那么代码已经说明了可能发生的异常。与此相反,如果你只是发现一个异常
,你不可能知道它是什么类型的,直到它发生。这样看:如果你打电话向某人寻求支持,你完全可以说“我有一个问题!”而不说你的具体问题是什么。这并不意味着更详细的问题描述是无用的。事实恰恰相反。我相信你可以通过阅读和理解中的例子来回答这个问题