有没有办法在不使用Java中的try / catch的情况下检查异常?

时间:2017-11-15 20:30:56

标签: java arrays indexoutofboundsexception

我对Java很新,我有一些代码可以在循环中对数组进行操作,并且数组会更改每个循环。当数组太短时,有时代码会抛出IndexOutOfBoundsException。如果没有抛出异常,我有没有办法只执行代码?我知道在Javascript中我可以做类似

的事情
var a = arr[index];
if (!a === null) { //do something }

我如何在Java中实现相同的效果?

2 个答案:

答案 0 :(得分:7)

您可以在访问某个索引处的数组项之前进行检查

if (arr != null && index >= 0 && index < arr.length) {
  // arr[i] exists
}

答案 1 :(得分:0)

如果没有抛出异常,您只能执行代码:

try {
  // Code that may throw an exception...

  // Only execute this if exception isn't thrown.
} catch (SomeException e) {
  // Handle exception.
}

但更好的策略不是首先引起异常。除了上面的丑陋语法之外,异常实际上很慢,因为它们需要构建完整的堆栈跟踪。我的意思是:它们对于许多应用程序来说可能足够快,但是构建那些你将要立即丢弃的堆栈跟踪只是浪费,而且不会更快。

您在这里讨论的异常类型是运行时异常,这是一种未经检查的异常。应该抛出运行时异常以指示编程错误 - 在这种情况下,您没有检查数组索引是否在边界内。

您可以使用单独的条件进行检查:

if (i >= 0) {
  if (i < arr.length) {
    // Only execute this if index in bounds
  }
}

或者,使用&&,一旦操作数为假,就停止评估:

if (i >= 0 && i < arr.length) {
  // ...
}