2011-04-08 74 views
0

如果我加入我的代码,这个try/catch语句:约try/catch语句简单的问题

try { 
    ... 
    method1(); 

} catch (Exception e) { 
    call_method(); 

} 

我在援引“call_method()”对任何类型的例外,在任何级别,如java.lang.NullPointerExceptionmethod1()。 。 对 ?

感谢

+0

但有一点需要注意,如果在method1中抛出异常,并且在该方法中或在异常抛出到初始调用之前进行处理,它将无法到达call_method()。发生在我的一个朋友,所以我想我应该提到它。 – Shaded 2011-04-08 13:40:05

回答

3

我在援引 “call_method()” 中的任何 类型的例外,在任何级别,例如 作为显示java.lang.NullPointerException 内部方法1()..对不对?

是........

+0

短而甜:-)! +1 – 2011-04-08 13:50:10

0

这将是一个稳定:是的! :-D

0

是的,这是正确的。但是,catch块不会触发错误,例如OutOfMemoryError。这通常是你想要的,因为错误应该表示应用程序无法从中恢复的基本问题。

0

由于您正在捕获通用异常,因此每次抛出异常时都会调用call_method()

你可以在这里看到:

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Exception.html

这个例外是例外,在一切最终继承的顶层类。

然而,作为一个经验法则,您通常不希望捕获Exception,而是希望捕获与您的try,catch块有关的特定错误。

1

是的,这将捕获任何延伸Exception的东西。特别要注意的是,这包括RuntimeException及其许多子类(如您提到的NullPointerException)。

它不会捕获其他Throwable对象,即Error及其许多子类。

您应该小心,不要编写过度隐藏的重要问题的异常处理程序。 (在这个例子中是否是这种情况,我不能说)。

0

是 - 对于从异常继承的任何东西。尽管一般情况下,除非该方法正在处理该异常,否则通常不会被认为是“良好的形式”(但我不试图假定某人的意图)。

你可能想在Throwable的看起来还有:这里是一个很好的讨论观点: When should Throwable be used instead of new Exception?

0

对于try块内抛出的任何异常,你会被调用call_method()

这是因为您试图捕获通用Exception对象而不是某些特定对象,如NullPointerException

如果你尝试这样的事情,

try { 
    // .... 
    method1(); 
} 
catch(NullPointerException e) { 
    // .... 
    call_method(); 
} 

那么只有当你有一个NullPointerException try块内,你会赶上抓住它&您call_method()将被执行。