代码之家  ›  专栏  ›  技术社区  ›  Rajesh K

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

  •  1
  • Rajesh K  · 技术社区  · 6 年前

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

    这是我的密码

    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 调用将其包装在中的方法 尝试{}捕获{} .现在如果 for loop 函数\u A() 位于 i =70,并引发空指针异常,该异常由 尝试{}捕获{} ,是否将继续执行for循环,直到 达到99或者它会停在那里 onPostExecute 将调用 异步任务 将结束。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Avinash Anand    6 年前

    如果 Function_A 抛出异常,但其中没有try-catch子句,异常将传播到调用方,即。 doInBackground .现在,你可以在这里做一些事情了。

    1. 就像“ChiefTwoPencils”说的那样,代码要防御性,这样就不会 NullPointerException 被抛出。

    2. 如果你真的想抓住它,但循环仍然应该继续,那么 try-catch 在回路内部。

    我建议,理想情况下,编写不抛出空指针的代码。在调用某个对象之前,始终检查null。或者试试看 Optional 从Java 8包装您认为可能为null的对象。这里是指向JavaDoc的链接- Optional

        2
  •  1
  •   Emre Dalkiran    6 年前

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