关于try / catch语句的简单问题

时间:2011-04-08 13:35:03

标签: java exception try-catch nullpointerexception

如果我在我的代码中添加这个try / catch语句:

try {
   ...
   method1();

} catch (Exception e) {
   call_method();

}

我是否在任何级别调用“call_method()”,例如java.lang.NullPointerException内的method1() ..对吗?

感谢

7 个答案:

答案 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()将被执行。