【问题标题】:Handling IOExceptions [closed]处理 IOExceptions [关闭]
【发布时间】:2017-03-28 19:47:27
【问题描述】:

假设有一个方法 getValueFormFile 并且它是公共的并且返回一个 int。它不接受任何参数,并且能够抛出 IOException 和 FIleNotFoundException。

编写一个调用上述 getValueFormatFile 方法的 try 语句。请务必处理该方法可能抛出的所有异常,

这就是我所拥有的

try {
  int value = getValueFromFile();
} catch(FileNotFoundException e) {

} catch(IOException e) {

}

这是处理问题的正确方法吗?

【问题讨论】:

  • 当你有空的 catch 块时,你并没有真正处理异常。
  • 好吧,你也可以选择catch(Exception e) { /* do nothing lol */ }...
  • 这听起来像是在使用 Stack Overflow 来做作业。我建议先阅读有关 try/catch 块的javadoc。网络上有很多信息可以帮助您。 Stack Overflow 不是来为你做这项工作的。
  • 在尝试提出更多问题之前,请阅读How do I ask a good question?

标签: java exception


【解决方案1】:

不,忽略异常几乎不是处理它们的正确方法。

您必须确定在这种情况下处理异常意味着什么。是否要使用默认值?你想中止执行吗?您想尝试不同的方法来获取值吗?选择正确的策略是否取决于文件是否丢失或是否由于其他原因无法读取?

由于正确的处理依赖于只有调用者知道的上下文,所以会引发异常以供调用者处理。

【讨论】:

    【解决方案2】:

    您通常希望打印堆栈跟踪、记录错误或(通常不是一个好主意)使用默认值填充值。

    int value;
    try {
      value = getValueFromFile();
    } catch(FileNotFoundException e) {
        e.printStackTrace();
        value = -1; // careful with this. Using -1 as an example because that's a common convention for representing an error condition
    } catch(IOException e) {
        e.printStackTrace();
        value = -1; // careful with this. Using -1 as an example because that's a common convention for representing an error condition
    }
    

    【讨论】:

    • 明白了。如前所述,该建议是可选的。在某些情况下肯定是有必要的,我想提供一个适度概括的答案。
    • printStackTrace() 方法有什么作用?
    • IMO 您最想要的是将已检查的异常重新抛出为未检查的异常,甚至不尝试从 IOException 之类的东西中恢复。
    • printStackTrace() 会将Java Stack Trace 输出到标准输出。
    • 所以对于这个问题,我认为渔获物没有填充任何东西是对的吗?
    猜你喜欢
    • 2021-08-14
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多