我在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
}
}
我的问题是假设我执行了AsyncTask
而doInBackground
调用了一个将其包含在try{}catch{}
中的方法。现在,如果for loop
中的Function_A()
位于i
= 70并且它抛出了由try{}catch{}
捕获的空指针异常,则for循环将继续执行直到i
的值达到99或将自行停止,onPostExecute
将被调用,AsyncTask
将结束。
答案 0 :(得分:1)
理想情况下,您永远不应该捕获空指针异常,因为它是RunTimeException,并且您的代码不应该允许这种情况。它表明您的代码中存在要修复的错误。如果您的代码逻辑在运行时无法从空指针异常中恢复,请不要尝试捕获它。
答案 1 :(得分:1)
如果Function_A
抛出异常并且其中没有try catch子句,则异常将传播给调用者,即doInBackground
。现在,你可以在这里做一些事情。
就像@ChiefTwoPencils所说,代码是防御性的,所以不会抛出NullPointerException
。
如果你真的想抓住它并且仍然继续循环,那么将try-catch
放在循环中。
理想情况下,我建议,编写不会抛出空指针的代码。在调用它之前总是检查null。或者从Java 8中尝试Optional
来包装您认为可能为null的对象。这里是JavaDoc的链接 -
Optional