【问题标题】:Simple question about try/catch statement关于 try/catch 语句的简单问题
【发布时间】:2011-04-08 13:35:03
【问题描述】:

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

try {
   ...
   method1();

} catch (Exception e) {
   call_method();

}

我是在为任何类型的异常调用“call_method()”吗,在任何级别,例如java.lang.NullPointerExceptionmethod1() .. 对吗?

谢谢

【问题讨论】:

  • 有一点需要注意...如果在方法 1 中抛出异常并在该方法中或在异常被抛出到您的初始调用之前的某个地方进行处理,它将不会到达 call_method() .发生在我的一个朋友身上,所以我想我应该提一下。

标签: java exception try-catch nullpointerexception


【解决方案1】:

我是否为任何调用“call_method()” 任何级别的异常类型,例如 作为 java.lang.NullPointerException 在method1()里面..对吗?

是的…………

【讨论】:

    【解决方案2】:

    是的,这将捕获任何扩展 Exception 的内容。请特别注意,这包括RuntimeException 及其许多子类(例如您提到的NullPointerException)。

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

    您应该注意不要编写过于宽泛的异常处理程序,最终会隐藏重要问题。 (在这个例子中是不是这样,我不能说。)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        是的,没错。但是,catch 块不会触发错误,例如OutOfMemoryError。这通常是您想要的,因为错误应该表明应用无法恢复的基本问题。

        【讨论】:

          【解决方案5】:

          由于您捕获的是通用异常,因此每次抛出异常时您都将调用call_method()

          你可以在这里看到:

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

          该异常是异常的顶级类,所有内容最终都继承自该类。

          但是根据经验,您通常不想捕获异常,而是希望捕获与您的 try、catch 块相关的特定错误。

          【讨论】:

            【解决方案6】:

            是的 - 对于任何从 Exception 继承的东西。虽然一般来说,除非该方法正在做一些事情来处理该异常,否则它通常不被认为是“好的形式”(但我不会试图假设一个人的意图)。

            您可能还想查看 Throwable:这是一个很好的讨论: When should Throwable be used instead of new Exception?

            【讨论】:

              【解决方案7】:

              对于 try 块内抛出的任何异常,您将调用 call_method()

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

              如果你尝试这样的事情,

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

              只有当你在 try 块中有 NullPointerException 时,你的 catch 才会捕获它并且你的 call_method() 才会被执行。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-09-10
                • 1970-01-01
                • 1970-01-01
                • 2016-03-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多