【问题标题】:Is there a way to check for an exception without using try/catch in Java?有没有办法在 Java 中不使用 try/catch 来检查异常?
【发布时间】:2017-11-15 20:30:55
【问题描述】:

我是 Java 的新手,我有一些代码会在循环中作用于数组,并且每个循环都会改变数组。有时,当数组太短时,代码会抛出 IndexOutOfBoundsException。有没有办法让我只在没有抛出异常的情况下执行代码?我知道在 Javascript 中我可以做类似的事情

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

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

【问题讨论】:

  • IndexOutOfBoundsExceptionnull 无关。您可以在访问元素之前检查索引。
  • Java 没有=== 运算符。

标签: java arrays indexoutofboundsexception


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    只有在没有抛出异常的情况下才能执行代码:

    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
      }
    }
    

    或者,使用&amp;&amp;,一旦操作数为假,它就会停止计算:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多