gpt4 book ai didi

java - 异常(exception)——继承

转载 作者:行者123 更新时间:2023-12-01 10:53:11 25 4
gpt4 key购买 nike

假设我定义了自己的异常(例如“MyException”),并且还具有以下方法:

    public String myMethod3() throws MyException {

try {
methodThatAlwaysThrowsException();
} catch (Exception e) {
MyException me = new MyException("Exception!");
throw me;
}

return "myMethod3";
}

public String myMethod2() throws MyException {

String str = myMethod2();
return "myMethod2 " + str;
}

public void myMethod1() {

String str = null;

try {
str = myMethod2();
} catch (MyException e) {
e.printStackTrace();
str = "Exception caught";
}

System.out.println(str);
}

我是否正确理解,当在“methodThatAlwaysThrowsException”中抛出异常时,它将被捕获并抛出 MyException。然后,MyMethod2() 会将其再次扔回 myMethod1(),myMethod1() 会捕获它,并且会写入“捕获异常”?

更具体地说,当一个方法抛出错误时,它上面的方法也只是抛出错误,直到你有一个 try/catch (或者 main 方法抛出它),它才会被捕获?我正在查看一些具有深层层次结构的代码,其中可能会通过 5-6-7 种方法抛出异常,然后捕获该异常。这是处理异常的好方法吗?对我来说,似乎应该立即发现错误。有充分的理由这样扔它们吗?

最佳答案

More specifically, when an error is thrown in a method, and the methods 'above' it also just throws the error, it won't be caught until you have a try/catch (or the main method throws it)?

是的。请阅读以下内容 JLS §11.3. Run-Time Handling of an Exception以及该链接的更多内容...

所以:

  • 如果您不捕获异常,则异常将传播直到主线程,并且主线程将终止。
  • 如果您捕获异常并重新抛出它,则将执行该方法中的后续代码块(请阅读我提供的 JLS 链接以获取更多详细信息)。
  • 如果您捕获异常并重新抛出它,那么它将传播到该方法的调用者。

来自 JLS:

If no catch clause that can handle an exception can be found, then the current thread (the thread that encountered the exception) is terminated. Before termination, all finally clauses are executed and the uncaught exception is handled

When an exception is thrown (§14.18), control is transferred from the code that caused the exception to the nearest dynamically enclosing catch clause, if any, of a try statement (§14.20) that can handle the exception.


您的问题:

Is this a good way to handle Exceptions?

是的,应该使用try-catch-finally处理异常

To me it seems like the error should be caught right away. Is there a good reason to throw them like this?

是的,您应该重新抛出它,以便可以通过 DynaTrace 等应用程序性能监控 (APM) 工具捕获它。如果您捕获异常并简单地吃掉它,那么此类 APM 工具将无法找到它,因此不会生成任何报告。

因此,从应用程序性能监控 (APM) 工具的角度来看,抛出异常是一种很好的做法,您可以再次捕获它并执行您想做的任何操作,但抛出一次。

关于java - 异常(exception)——继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33735385/

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