【问题标题】:Exception handling, If Statements or Try/Catch blocks? [closed]异常处理、If 语句或 Try/Catch 块? [关闭]
【发布时间】:2012-12-31 23:43:25
【问题描述】:

您认为哪种方式更适合异常处理,if 语句或Try/Catch 块?

因为如您所知,所有异常都可以用if 语句处理。

【问题讨论】:

  • 有点错误,已编辑
  • @APoliteBoy 的意思可能是所有异常都可以使用If 语句处理?
  • 您能否提供一个由try catchif 语句处理的相同异常的示例?
  • 如果您可以使用if 语句来避免导致异常发生,那么您可能应该这样做。但有时你没有那个选项

标签: java exception for-loop try-catch


【解决方案1】:

视情况而定。我会尽力解释。

考虑这个简单的例子:

try {
  myVar.myFunc();
} 
catch(NullPointerException e) {
  //bla bla
}

if (myVar != null) 
   myVar.myFunc();

如果myVar可以null作为你代码流的一部分,那么你可以使用if语句,否则你应该使用异常,因为它可能是由于你无法控制的事情造成的。

【讨论】:

  • 非常有用,谢谢!
【解决方案2】:

嗯,根据我的理解,你的意思是 if/else 语句,函数的返回值将是 SUCCESS 或 FAILURE,所有实际工作都将在函数的参数上完成。

这是一种 C 风格的编码 - 没有例外。
在 java 中,因为您不能通过引用(或指针)传递元素,所以这种方法是有问题的(您必须为返回 int 的方法创建一个包装器,非常不优雅),甚至在 C 中 -它更像是必需品而不是优雅的东西。

示例 - C 风格的代码可以做到:

int calcSomething(int arg1, int arg2, int* result) { 
  //calcualtions
  if (...) return FAILURE;
  *result = ...
  return SUCCESS;
}

而编码环境将是:

if (calcSomething(...) == FAILURE) { handleError(); }

注意 - 该方法在 java 中并没有完全消失,例如 Collection#add() 返回一个 boolean 指示操作是否成功。它主要用于false 值不是真正错误的操作 - 更多的是表明无事可做。

每当“错误”被阻塞时——使用异常来处理错误——它们的可读性更高,代码的可维护性也更好。如果它只是一个指示(对于 eaxmple - 元素已经在集合中) - 返回值中的布尔值就可以了。

【讨论】:

  • 非常有用,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2019-01-07
  • 2016-03-15
相关资源
最近更新 更多