如果我在我的代码中添加这个try / catch语句:
try {
...
method1();
} catch (Exception e) {
call_method();
}
我是否在任何级别调用“call_method()
”,例如java.lang.NullPointerException
内的method1()
..对吗?
感谢
答案 0 :(得分:3)
我正在调用" call_method()"任何 任何级别的例外类型 as java.lang.NullPointerException 在method1()..对吗?
是........
答案 1 :(得分:1)
是的,这会抓住任何延伸Exception
的东西。请特别注意,这包括RuntimeException
及其许多子类(如您所提到的NullPointerException
)。
它不会捕获其他Throwable
个对象,即Error
及其许多子类。
您应该注意不要编写过于宽泛的异常处理程序,最终会隐藏重要问题。 (在这个例子中是否就是这种情况,我不能说。)
答案 2 :(得分:0)
那将是一个稳定的:是的! :-D
答案 3 :(得分:0)
是的,这是正确的。但是,catch块不会触发错误,例如OutOfMemoryError
。这通常是你想要的,因为错误应该是应用程序无法恢复的基本问题的信号。
答案 4 :(得分:0)
由于您正在捕获通用异常,因此每次抛出异常时都会调用call_method()
。
你可以在这里看到:
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Exception.html
该异常是异常的顶级类,其中所有内容最终都继承自。
但是根据经验,您通常不希望捕获异常,而是希望捕获与try,catch块相关的特定错误。
答案 5 :(得分:0)
是 - 对于从Exception继承的任何内容。虽然一般情况下,除非该方法正在处理该异常,否则它通常不被视为“良好形式”(但我不会试图假设一个人的意图)。
你可能也想看看Throwable:这是一个很好的讨论: When should Throwable be used instead of new Exception?
答案 6 :(得分:0)
对于try块中抛出的任何异常,您将调用call_method()
。
这是因为您试图捕获通用Exception
对象而不是某些特定对象,例如NullPointerException
。
如果您尝试这样的话,
try {
// ....
method1();
}
catch(NullPointerException e) {
// ....
call_method();
}
然后只有当你在try块中有一个NullPointerException
时,你的捕获才能捕获它。您的call_method()
将被执行。