不熟悉JAVA或异常处理。寻找关于什么是可接受的和什么是不赞成的建议。
这个场景,我正在构建一个生命游戏程序,我设置了条件来检查一个单元格是否会超出界限而不是尝试访问该“单元格”。我的问题是,使用try catch块而不是8个条件是否可以接受,如果抛出arrayOutOfBounds异常则不执行任何操作。即忽略细胞超出界限,或者这是不好的做法?例如......
try{
neighbors += cellIsAlive(row, col);
}catch(ArrayIndexOutofBoundsException e)
{
//dont do anything and continue counting neighbors
}
在这种情况下,cellIsAlive方法检查多维数组中的位置,如果它处于活动状态,则返回1,否则抛出ArrayIndexOutofBoundsException。
这是一个好主意还是以这种方式使用异常是不好的做法?
提前感谢任何意见。
答案 0 :(得分:5)
这绝对是一种不好的做法。异常处理会占用大量资源,并且只能用于特殊情况(顾名思义)。
看一下本书的第9章(并在可能的情况下阅读其余内容):
http://www.amazon.com/Effective-Java-Edition-Joshua-Bloch/dp/0321356683/
你会发现你想要做的事情与用来说明你不应该做的事情的例子非常相似,我引用:
有一天,如果你运气不好,你可能会偶然发现一段代码 看起来像这样:
// Horrible abuse of exceptions. Don't ever do this!
try {
int i = 0;
while(true)
range[i++].climb();
} catch(ArrayIndexOutOfBoundsException e) {
}
这段代码有什么作用?从检查来看,这一点并不明显 这是不足以使用它的原因(第55项)。结果证明是一个 非常错误的习惯用于循环通过元素 阵列。
答案 1 :(得分:3)
抓住RuntimeExcepions
是一种不好的做法。 ArrayIndexOutofBoundsException
是RuntimeException
的子类。 RuntimeExceptions
是程序员的错误,你应该只捕获已检查的例外。
答案 2 :(得分:0)
捕获ArrayIndexOutofBoundsException不会帮助您并捕获运行时异常是一个糟糕的习惯。 修复cellIsActive()方法中的逻辑..
使用http://www.tutorialspoint.com/java/java_exceptions.htm了解详情