我在我的安卓应用程序中使用try{}catch{}
来捕获Null指针异常。
这是我的密码
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()
中的Function_A()
中的i
= 70并且抛出由try{}catch{}
捕获的空指针异常,那么for循环将继续执行,直到i
值达到99为止,或者它本身会停止,onPostExecute
将被调用,AsyncTask
将结束。
发布于 2018-04-14 19:40:41
如果Function_A
抛出异常,并且其中没有propagate子句,则异常将传播到调用方,即doInBackground
。现在,你可以在这里做一些事情。
NullPointerException
。try-catch
放在循环中。理想情况下,我建议编写不抛空指针的代码。在调用上面的内容之前,始终要检查是否为空。或者尝试使用Java8中的Optional
来包装您认为可能为空的对象。下面是指向JavaDoc - 可选的链接
发布于 2018-04-14 12:07:10
理想情况下,您不应该捕获空指针异常,因为它是一个RunTimeException,您的代码不应该允许这种情况。它显示您的代码中有一个bug需要修复。如果您的代码逻辑无法在运行时从空指针异常中恢复,请不要试图捕获它。
https://stackoverflow.com/questions/49835516
复制相似问题