gpt4 book ai didi

java - 调用堆栈 : catch vs. 抛出

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:29:28 25 4
gpt4 key购买 nike

什么时候用“catch”什么时候用“throws”?

try {
//stuff
}
catch (MyException me) {
//stuff
}

对比

public void doSomething() throws MyException {
//stuff
}

在“throws”的情况下,我的 catch 应该放在调用栈的什么地方?

Main
----- Function 1
----- Function 2
----- Function 3 (generate exception)

如果我将异常从函数 3 传播到函数 2,为什么函数 2 不应该做同样的事情?所以最后我会管理“main”中的所有异常,我认为将所有代码放在一个 try block 中不是一个很好的做法,不是吗?

那么在“接住”和“抛出”之间做出选择的逻辑方式是什么?在第二种情况下,我应该将 catch 放在调用堆栈的什么位置?

最佳答案

它们基本上是相反的。 throws 表示允许函数抛出异常; catch 表示 block (try) block 预计可能会抛出异常,并准备好处理它。

拿球做比喻,投手抛出一个 catch 手所期望的异常。 catch 手 接住 球并以某种方式处理它。 (好吧,也许这个比喻有点不对,因为 catch 手通常通过将球扔回投手来处理球。:))在这里,投手是一种方法,而 catch 手是 try-catch-[ finally] block 。

关于java - 调用堆栈 : catch vs. 抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16365377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com