当前位置: 首页 > 面试题库 >

java:不能抛出异常:未处理的异常类型Exception

秦宜修
2023-03-14
问题内容

我想捕获一个异常,将其记录下来,设置一个标志,然后重新抛出相同的异常

我有这个代码:

public Boolean doJobWithResult() {
    boolean result = true;
    final Feed feed = Feed.findById(feedId);
    try {
        feed.fetchContents();
    } catch (Exception ex) {
        result = false;
        Logger.info("fetching feed(%d) failed", feedId);
        throw ex;
    }
    return result;
}

但是eclipse在throw ex时抱怨,说“未处理的异常类型Exception”,建议我在它周围添加一个try-catch块。

实际上,我希望调用此方法的进程处理该异常,而不是自己处理……如果一切正常,我只想返回true,如果有异常,则将其记录下来

另一方面,我可以将异常包装在另一个异常中,但是不能抛出相同的异常。

任何想法?


问题答案:

我认为这里有很多事情要提到:

  1. 您要么希望doJobWithResult()成功返回true,失败返回false,要么成功不返回任何内容,而失败则抛出异常。两者不能同时进行。在第一种情况下,捕获异常,记录它并返回false,在第二种情况下更改签名返回void,并抛出 一个 异常,并在调用者处理。
  2. 这是 不要 捕获异常,将其记录并重新抛出它。为什么?因为您的方法的潜在调用者不知道您已经在记录它,所以也可能要记录它。引发异常(在这种情况下,调用方必须处理该异常),或者捕获该异常并对其进行处理(记录该异常)。
  3. 请注意,Exceptionthrow并不能为方法的调用者提供任何可能导致方法出错的线索,总是最好抛出更具体的异常,或者将异常包装在用户定义的异常中并重新抛出。
  4. 此外,如果您抛出Exception,调用者可能会很想捕获Exception而不注意它也会捕获每个RuntimeException(因为它是从派生的Exception),而这可能不是您期望的行为。


 类似资料:
  • 我是jUnit和mockito的新手。对于虚空的嘲弄是如何发挥作用的,我完全感到困惑。在这里,如果名称是“hello”,则函数抛出一个异常。但当我测试它时,它并没有抛出异常... 测试 }

  • 我正在构建一个颤振应用程序,我必须解析api中的一些数据,我设置了所有内容,但我收到了这个错误,我不知道为什么,我是颤振新手,任何帮助都将不胜感激。谢谢。 生成的错误 这是我的api响应示例 这就是我处理数据的方式 这是模型课

  • 抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因

  • 问题内容: 我试图在Netbeans中重构一个大型程序,但我有点迷茫。我从来没有非常模块化,但是现在通过实际学习如何做到这一点来尝试纠正这种情况,并在将来纠正这种情况。不幸的是,我在将某些教程翻译成我的程序时遇到了麻烦。所以我希望这里有人可以帮忙。目前,我正在尝试分解一部分采用特定格式的文件并制成表格的代码。我知道我需要创建一个类并使用它来创建表对象,但是我不确定如何做。我有一个主文件,用于获取文

  • 问题内容: 我之前从未遇到过此错误,所以我不确定该怎么做或意味着什么 未处理的异常类型 它在以下代码中发生: 它给了我2个选项“添加抛出声明”和“使用try / catch进行环绕”。 我该怎么办,为什么? 问题答案: 这意味着您要调用的方法已使用指令声明了从类派生的异常。当以这种方式声明一个方法时,您将被迫使用一个块来处理该异常,或者将一个相同的(对于相同的异常或超类型)语句添加到您的方法声明中

  • 我正在解码一个响应体,我得到了错误: 我在Udemy上学习颤振教程时,正在尝试使用API。教程说要使用https://javiercbk.github.io/json_to_dart/将JSON转换为Dart。我把JSON从https://www.openbrewerydb.org/并将其转换为Dart,但我遇到的问题是,当我尝试解码API时,我得到了未处理的错误异常:“List”类型不是“Map