是否可以抛出ArrayIndexOutOfBoundsException?

时间:2014-04-29 03:37:07

标签: java indexoutofboundsexception

public void onClick(int row) {
    if (mItems.size() <= row) {
        return;
    }
    Action action = mItems.get(row);
}

调用mItems.get()?

是否安全

编辑:从崩溃日志开始,row为-1,然后抛出异常。

编辑:安全写作是:

if (row < 0 || row >= mItems.size()) {
...
}

4 个答案:

答案 0 :(得分:0)

ArrayIndexOutofBoundsException是未经检查的异常。因此,java编译器不会检查给定的代码块是否抛出它。

如果抛出此异常,则表示您正在索引数组的边界 - 正如异常的名称所示。

链接讨论已检查和未检查的异常: http://docs.oracle.com/javase/tutorial/essential/exceptions/catchOrDeclare.html

编辑: 在您的特定实例中,是另一个访问mItems的线程吗?因为这可能会使mItems的大小在你检查它的大小和你索引它的那一刻之间发生变化。

答案 1 :(得分:0)

如果问题是,此代码是否会抛出一个ArrayIndexOutOfBoundsException,那么以下情况

如果将负值传递给行,则此代码最终会出现在java.lang.ArrayIndexOutOfBoundsException

答案 2 :(得分:0)

是的,它看起来很安全。

您的问题似乎并未显示您对特定问题的努力或研究。 您是否尝试使用row的某些值编译并测试运行代码?

你可以在这样做时自己想出来。

答案 3 :(得分:0)

无论选中还是取消选中,都可以抛出任何类型的异常。

唯一的问题是已检查的编译器强制您处理,但未经检查,如ArrayIndexOutOfBound异常编译器不会抱怨。

在您的代码中,您可以像下面那样抛出它

public void onClick(int row) {
    if (mItems.size() <= row) {
        throw new ArrayIndexOutOfBoundsException();
    }
    Action action = mItems.get(row);
}