检查Java中的界限

时间:2013-10-30 01:35:41

标签: java arrays indexoutofboundsexception

我正在尝试检查数组位置是否超出范围,最简单的方法是什么?

int[] arr;
populate(arr);
if(arr[-1] == null)
//out of bounds!

这样的事情会起作用吗?

我很确定这可以通过trycatch或扫描仪来完成,但对于一个简单的小程序,还有另外一种方法吗?

3 个答案:

答案 0 :(得分:34)

绝对为此使用try-catch。只需使用:

boolean inBounds = (index >= 0) && (index < array.length);

使用try-catch实现该方法需要捕获ArrayIndexOutOfBoundsException,这是一个未经检查的异常(即RuntimeException的子类)。这种例外永远不应该(或者,至少非常很少)被捕获和处理。相反,它们应该首先被阻止。

换句话说,未经检查的例外是您的程序不期望从恢复的例外情况。现在,这里和那里可以有例外(没有双关语)。例如,通常通过调用字符串上的Integer.parseInt()并捕获潜在的NumberFormatException(未选中)来检查字符串是否可以作为整数进行比较。这被认为是可以的,但在做这样的事情之前总是三思而行。

答案 1 :(得分:3)

不,这会导致异常。

相反,做

if (x < 0 || x >= arr.length) {
    //x is out of bounds!
}

答案 2 :(得分:2)

最好手动检查索引是否在范围内。

if(index >=0 && index < array.length){
   // in range
}  

不应该捕获未经检查的异常,即不需要try-catch块的异常。 ArrayIndexOutOfBoundsException就是其中之一。

所有未经检查的例外都来自RuntimeException类 从这一课开始IndexOutOfBoundsException
这进一步专注于StringIndexOutOfBoundsArrayIndexOutOfBounds

  

RuntimeException是可以使用的那些异常的超类   在Java虚拟机的正常操作期间抛出。

     

RuntimeException及其子类是未经检查的异常。   未经检查的异常不需要在方法中声明   构造函数的throws子句,如果它们可以被执行抛出   方法或构造函数并在方法或方法之外传播   构造函数边界。