gpt4 book ai didi

java - 在 Java catch block 中,您如何知道哪个方法/行抛出异常?

转载 作者:搜寻专家 更新时间:2023-10-31 08:32:16 25 4
gpt4 key购买 nike

在 try block 中,我想执行两个函数。如果第一个失败,则不要执行第二个。我还想打印出哪个函数失败了。

请参阅以下代码。

try {
a = func1();
b = func2(); //won't execute if a failed
}
catch (Exception e) {
//TODO: print a or b failed?
}

语言是否自然支持这种情况?

如果不是,以下是一个好的做法吗? (我想不出有什么不妥。但这让我很担心,因为我不记得看到有人在 catch 中使用 return。)

try {
a = func1();
}
catch {
//print: a failed
return; //if a failed then skip the execution of b
}

try {
b = func2();
}
catch {
//print: b failed
}

编辑:评论总结:

  1. 两种方法抛出不同的异常。

    • 在这种情况下,方法是别人写的,我无法控制。
  2. e.printStackTrace() 将打印行号和函数

    • 我想做的不仅仅是打印。更像是,如果失败,则执行以下代码。

最佳答案

你想要的是 String methodName = e.getStackTrace()[0].getMethodName());

但这不是一个好的做法。标准方法是在日志记录框架中使用适当的方法记录异常,或者(如果编写控制台应用程序,Java 很少出现这种情况)将其打印到错误或标准输出或可选地打印到其他 PrintStream,例如使用 printStackTrace(printStream)

但在大多数情况下,您希望将异常传播到上层并由适当的高级代码处理(或决定不处理)。像这样捕获异常会导致严重的错误。在 99% 的情况下,从 catch black 返回也是一个非常糟糕的主意,因为异常表示方法异常终止,而返回值则不会。

关于java - 在 Java catch block 中,您如何知道哪个方法/行抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34821944/

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