【问题标题】:Will the Code continue to be executed if an error in caught using try{}catch{}如果使用 try{}catch{} 捕获错误,代码是否会继续执行
【发布时间】:2018-09-24 21:45:39
【问题描述】:

我在我的 Android 应用程序中使用 try{}catch{} 来捕获空指针异常。

这是我的代码

public class load extends AsyncTask<Void, Void, Void> {


        @Override
        public Void doInBackground(Void... voids) {


            try {
                Function_A();
            }
            catch (NullPointerException e ){

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void n) {
            super.onPostExecute(n);

        }

这是Function_A() 代码

 public void Function_A()
{
   for(int i=0;i<100;i++)
    {
       //Some code which might trigger Null Pointer exception some times
    }

}

我的问题是假设我执行AsyncTask 并且doInBackground 调用一个将其包装在try{}catch{} 中的方法。现在如果Function_A() 中的for loopi = 70 并且它抛出一个被try{}catch{} 捕获的空指针异常,那么for 循环会继续执行直到i 的值达到99还是它自己会停在那里,onPostExecute 将被调用,AsyncTask 将结束。

【问题讨论】:

  • 如果 function_A 抛出异常,则表示代码已退出函数调用并返回到 doInBackground 方法。所以,循环不会继续。
  • @AvinashAnand 感谢您的回复。您能否发布一个答案,以便我接受。只是为了重新澄清Function_A 将退出空指针异常,即使该函数是使用try{]catch{} 调用的?
  • 防御性编码比捕获 NPE 更好。
  • @ChiefTwoPencils 谢谢。我相信你是非常正确的,但在我的情况下,如果捕捉到空指针异常不会有任何区别,因为这是为了显示通知但并不重要。我将很快提出另一个问题来尝试解决空指针异常,因为我在加载电话中所有文件的列表时遇到此错误。

标签: java android exception nullpointerexception try-catch


【解决方案1】:

如果Function_A 抛出异常并且其中没有try catch 子句,则异常将传播到调用者,即doInBackground。现在,您可以在这里做一些事情。

  1. 就像@ChiefTwoPencils 所说,防御性编码,这样就不会抛出NullPointerException

  2. 如果你真的想捕获它并且循环仍然应该继续,那么将 try-catch 放入循环中。

理想情况下,我建议编写不抛出空指针的代码。在调用它之前总是检查 null 。或者尝试使用 Java 8 中的 Optional 来包装您认为可能为空的对象。这是JavaDoc的链接- Optional

【讨论】:

    【解决方案2】:

    理想情况下,您永远不应该捕获空指针异常,因为它是一个 RunTimeException 并且您的代码不应该允许这种情况。它表明您的代码中有一个错误需要修复。如果您的代码逻辑在运行时无法从空指针异常中恢复,请不要尝试捕获它。

    【讨论】:

    • 谢谢。我相信你是非常正确的,但在我的情况下,如果捕捉到空指针异常不会有任何区别,因为这是为了显示通知但并不重要。我将很快提出另一个问题来尝试解决空指针异常,因为我在加载电话中所有文件的列表时遇到此错误。
    猜你喜欢
    • 1970-01-01
    • 2021-01-22
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2021-08-03
    相关资源
    最近更新 更多