尝试捕获ArrayIndexOutOfBoundsException?

时间:2014-09-19 14:59:55

标签: java error-handling

我的项目包含一个小图标移动到网格上,尺寸为25 x 20.我知道我可以使用一些if / else块轻松完成此操作,但我想了解更多有关错误处理的信息。

我在想的是使用try catch,但它并没有捕获数组索引超出范围异常或任何Exception:它不会返回"错误"或者位置,所以它永远不会进入捕获区。

我在想这样的伪代码:

try {
    // Code
} catch(The exception) {
   x - 1 or + 1
}

实际代码:

 public void tick() {
    Random rand = new Random();
    try {
        int x, y;
        x = rand.nextInt(3) + (-1); //Slumpar fram en siffra (-1, 0, 1)
        y = rand.nextInt(3) + (-1); 
        setPosition(new Point((int)getPosition().getX()+x,(int)getPosition().getY() + y));
    } catch(Exception e) {
        System.out.println("error");
    }
    System.out.println("x: " + getPosition().getX());
    System.out.println("y: " + getPosition().getY());
}

public String type() {
    return "Dummy";
}

3 个答案:

答案 0 :(得分:15)

我在代码中的任何地方都没有看到数组,所以这可能是为什么try块没有捕获任何东西(我假设其中一个被调用的方法中有一个数组?) 。而且,你真的,真的不应该允许你的程序在数组的范围之外读取。这只是糟糕的设计。话虽如此,这里是你如何以我能想到的最清晰的方式捕捉异常:

try {
    array[index] = someValue;
}
catch(ArrayIndexOutOfBoundsException exception) {
    handleTheExceptionSomehow(exception);
}

或者像@Peerhenry建议的那样做,如果指数不正确就抛出一个新的例外,这将是一个更好的设计。

答案 1 :(得分:4)

将代码置于try catch块中只有在内部的一个或多个方法可以抛出异常时才有意义。您可以抛出这样的异常:

public static void setPosition(int x, int y) throws Exception
{
    if(x<0 || y<0) throw new Exception("coordinate components must be greater than zero");
    else...
}

答案 2 :(得分:-2)

 try {
                //code related  something to array
            }
            catch(ArrayIndexOutOfBoundsException ignored) {

            }