在 Java 中检出边界

2022-09-02 11:36:16

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

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

像这样的东西会起作用吗?

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


答案 1

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

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

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

换句话说,未选中的异常是程序不应从中恢复的异常。现在,这里和那里可能有例外(没有双关语)。例如,通过调用字符串并捕获电位(未选中)来检查字符串是否为整数的比喻已成为一种常见的做法。这被认为是可以的,但在做这样的事情之前,总是要三思而后行。Integer.parseInt()NumberFormatException


答案 2

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

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

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

所有未经检查的异常都来自类。
从这个类中得出了
“这”进一步专用于 和RuntimeExceptionIndexOutOfBoundsExceptionStringIndexOutOfBoundsArrayIndexOutOfBounds

RuntimeException 是在 Java 虚拟机的正常操作期间可以引发的那些异常的超类。

RuntimeException 及其子类是未经检查的异常。如果未经检查的异常可以由方法或构造函数的执行引发并传播到方法或构造函数边界之外,则不需要在方法或构造函数的 throw 子句中声明这些异常。