检查NullPointerException或ArrayOutOfBound异常Java的解决方案

时间:2013-08-09 17:35:54

标签: java

在下面的代码中,我如何防范ArrayIndexOutOfBoundsException或NullPointerException,因为在某些时候,注释第2行将为mydates []或date [mod]中的最后一个条目提供一个空值。如果我在注释行1中mod > dates.lenght

,则为ArrayOutOfBoundException
if(dates.length >= 10){  
    mydates = new String[11];
    int last = dates.length;
    int mod = 0;
    int add_mod = (int) Math.round((double)Math.round(last) /10); 

    for(int i =0; i < dates.length; i++){
        if(mod >= dates.length){ // line1
            break;
        }

        mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(
                        Long.parseLong(dates[mod])));  //line2

        mod += add_mod;
    }

} else {
    mydates = new String[dates.length];

    for(int i =0; i < dates.length; i++){
        mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(
                       Long.parseLong(dates[i])));
    }

}

我解决它的方法是再次迭代数组并检查空值,同时从那里填充新数组。但我想知道是否有更好的解决方案。

2 个答案:

答案 0 :(得分:1)

您可以检查对象是否为空

在你的情况下,

    if(dates[mod] != null){
        // PERFORM SOME OPERATION
    }


 for(int i =0; i < dates.length; i++){

            if(mod < dates.length){ // line1
            // SOME OPERATION

            if(dates[mod] != null){
                mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(
                        Long.parseLong(dates[mod])));  //line2
            }
        }
 }

希望有所帮助。

答案 1 :(得分:1)

如果mydates只有11长,并且您知道dates 至少那么长,可能会使用mydates.length进行迭代:

for(int i =0; i < mydates.length; i++){
...

然后,ArrayOutOfBoundException时,您将无法获得i >= mydates.length

由于您的检查,您将无法获得ArrayOutOfBoundException mod

if(mod >= dates.length) {
    break;
}

对于空检查,添加

if (dates[mod] != null) {
    mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(Long.parseLong(dates[mod])));
}

避免NullPointerException