首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果使用try{}catch{}捕获错误,将继续执行代码吗?

如果使用try{}catch{}捕获错误,将继续执行代码吗?
EN

Stack Overflow用户
提问于 2018-04-14 19:46:46
回答 2查看 495关注 0票数 1

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

这是我的密码

代码语言:javascript
代码运行次数:0
运行
复制
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()代码

代码语言:javascript
代码运行次数:0
运行
复制
 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()中的Function_A()中的i = 70并且抛出由try{}catch{}捕获的空指针异常,那么for循环将继续执行,直到i值达到99为止,或者它本身会停止,onPostExecute将被调用,AsyncTask将结束。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-15 03:40:41

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

  1. 就像@ChiefTwoPencils说的那样,代码是防御性的,这样就不会抛出NullPointerException
  2. 如果您真的想要捕获它,并且仍然应该继续循环,那么将try-catch放在循环中。

理想情况下,我建议编写不抛空指针的代码。在调用上面的内容之前,始终要检查是否为空。或者尝试使用Java8中的Optional来包装您认为可能为空的对象。下面是指向JavaDoc - 可选的链接

票数 1
EN

Stack Overflow用户

发布于 2018-04-14 20:07:10

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49835516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档