【问题标题】:Try-Catch and how throw work in catch blockTry-Catch 以及 throw 如何在 catch 块中工作
【发布时间】:2009-10-19 19:39:19
【问题描述】:

我对投掷有疑问。 throw 在下面的代码中是如何工作的? catch 块是否返回 false?

try
{
    //code
}
catch(Exception ex)
{
    throw;
    return false;
}

【问题讨论】:

  • 您可能想列出您使用的语言。
  • 最好的办法是编写一些代码并在调试器中运行。
  • @bodnarbm:是的,但语法可能是 C++ 或有点像 Java,关于问题的行为在这两种语言之间没有变化。发现 C# 的外观和工作方式非常相似,我不会感到惊讶 - 但我不知道。
  • 它是 C# 代码。我忘了标记它。

标签: try-catch


【解决方案1】:

不,它会重新抛出。调用堆栈上的某个地方需要捕获它。

永远无法到达return false

【讨论】:

  • 没有。不会有返回值
  • 不,它不返回,它通过异常退出函数——控制进入调用堆栈的catch块内。
  • 有什么方法可以返回 false 也可以抛出?
  • 否 - 如果您因异常离开,则无法正常返回。永远不会到达 return 语句 - 它是死代码。
  • 我想问题是你返回 false 并抛出异常意味着什么——如果你想让调用者知道发生了什么事,只需返回 false 然后调用者可以抛出 if它必须。或者调用者可以捕获异常。或者,您可能需要一个包含更多信息的更复杂的回报。
【解决方案2】:

抛出和返回 false 没有意义。异常用于指示何时发生错误,因此没有理由同时有一个布尔标志来指示。假设您的 try/catch 在 BankAccount 类中。如果您的客户端代码如下所示:

boolean success = bankAccount.withdraw(20.00);
if(success == false) System.out.println("An error! Hmmm... Perhaps there were insufficient funds?");
else placeInWallet(20.00);

你可以这样做:

try {
   bankAccount.withdraw(20.00);
   placeInWallet(20.00);
}
catch(InsufficientFunds e) {
   System.out.println("An error! There were insufficient funds!");
}

这更清晰,因为正常逻辑与错误处理逻辑有明确的分离。

【讨论】:

    【解决方案3】:

    没有返回值。 throw 停止执行方法,调用块将收到重新抛出的异常。

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2011-12-25
      • 1970-01-01
      • 2015-07-07
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多