【问题标题】:Java dealing with exceptions appropriatelyJava 适当地处理异常
【发布时间】:2014-03-21 01:06:10
【问题描述】:

不太熟悉 JAVA 或异常处理。寻找一些关于什么是可以接受的,什么是不受欢迎的建议。

场景,我正在构建一个生命游戏程序,我设置了条件来检查一个单元格是否会越界并且不尝试访问那个“单元格”。我的问题是,使用 try catch 块而不是 8 个条件是否可以接受,并且如果抛出 arrayOutOfBounds 异常则什么都不做。即忽略单元格越界,或者这是不好的做法?比如……

try{
    neighbors += cellIsAlive(row, col);
}catch(ArrayIndexOutofBoundsException e)
{
    //dont do anything and continue counting neighbors
}

在这种情况下,cellIsAlive 方法检查多维数组中的位置,如果它还活着则返回 1,否则返回 0 并抛出 ArrayIndexOutofBoundsException。

以这种方式使用异常是个好主意还是不好的做法?

提前感谢您的任何意见。

【问题讨论】:

  • 哈哈对不起,我的 php 出来了。将编辑。
  • Exceptions 用于处理...exceptions。但是既然你能知道问题,那你最好简单检查一下索引。。
  • 你永远不应该吞下异常,你根本不会!
  • @Maroun 我在想,但这似乎会大大简化代码并使其更具可读性,就像我说我在这种情况下没有那么有经验。似乎每个人都同意条件更好。
  • 一般来说,使用异常来控制程序流是不受欢迎的,因为检查边界通常比创建然后捕获异常要便宜得多(尽管我相信成本随着 JVM 下降已经进化)。

标签: java exception-handling


【解决方案1】:

捕捉RuntimeExcepions 是一种不好的做法。 ArrayIndexOutofBoundsExceptionRuntimeException 的子类。 RuntimeExceptions 是程序员的错,你应该只捕获已检查的异常。

【讨论】:

    【解决方案2】:

    这绝对是个坏习惯。异常处理会消耗大量资源,并且应该只(顾名思义)用于异常情况。

    看看这本书的第 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 条)。原来是一个 用于循环遍历元素的非常糟糕的习语 数组。

    【讨论】:

    • 感谢您提供的信息和图书推荐。
    【解决方案3】:

    捕获 ArrayIndexOutofBoundsException 不会帮助您,并且捕获运行时异常是一个坏习惯。 修复 cellIsActive() 方法内部的逻辑..

    更多详情请使用http://www.tutorialspoint.com/java/java_exceptions.htm

    【讨论】:

      猜你喜欢
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      相关资源
      最近更新 更多