如果使用try {} catch {}捕获错误,代码是否会继续执行

时间:2018-04-14 19:46:46

标签: java android exception nullpointerexception try-catch

我在Android应用中使用try{}catch{}来捕获Null Pointer异常。

这是我的代码

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
    }

}

我的问题是假设我执行了AsyncTaskdoInBackground调用了一个将其包含在try{}catch{}中的方法。现在,如果for loop中的Function_A()位于i = 70并且它抛出了由try{}catch{}捕获的空指针异常,则for循环将继续执行直到i的值达到99或将自行停止,onPostExecute将被调用,AsyncTask将结束。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  1. 就像@ChiefTwoPencils所说,代码是防御性的,所以不会抛出NullPointerException

  2. 如果你真的想抓住它并且仍然继续循环,那么将try-catch放在循环中。

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