gpt4 book ai didi

java - 如何知道抛出了哪个异常

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

我正在审查我们的代码库,有很多这样的语句:

try
{
doSomething()
} catch (Exception e)
{

}

但是我想要一种方法来知道 doSomething() 抛出了哪个异常(在 doSomething 的实现中没有 throw 语句)所以我可以捕获该异常而不是仅仅捕获一般的异常,即使使用 findBugs 它也给出了一个警告 REC_CATCH_EXCEPTION

我应该提到,记录异常或将其打印到控制台对我没有帮助,因为在这种情况下重现导致异常的错误需要时间。

谢谢

最佳答案

如果 doSomething 中没有 throws 语句(例如 doSomething() throws IOException),任何将发生的异常都将是运行时异常。如果您想知道 doSomething 抛出的异常的确切类别,您可以随时尝试

try {
doSomething();
} catch (RuntimeException e){
System.out.println(e.getClass().getName());
}

在不实际运行程序的情况下知道可以抛出哪些运行时异常是很困难的。即使 doSomething() 调用的代码都没有显式抛出,核心 java 操作总是可以抛出 NullPointerExceptionArrayIndexOutOfBoundsException 等输入错误。以下是一些想法:

  • 手动挖掘。至少你会知道一些异常(exception)情况。
  • 使用反射查找可从 doSomething 访问的任何 throw 语句。
  • 运行您的测试用例并记录上面抛出的异常。好的测试会揭示 doSomething 的调用者应该准备好应对的重要错误。
  • 首先去找那些把渔获物放在那里的人

在任何情况下,捕获尽可能具体的异常通常是个好主意,因为当您尝试在一个子句中处理所有情况时,您并不确切地知道什么出了问题。

关于java - 如何知道抛出了哪个异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7586305/

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