当前位置: 首页 > 面试题库 >

Java适当地处理异常

松波
2023-03-14
问题内容

不太熟悉JAVA或异常处理。寻找关于什么可以接受和什么被皱眉的建议。

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

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

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

这样使用异常是个好主意还是不好的做法?

提前感谢您的任何投入。


问题答案:

这绝对是一个坏习惯。异常处理会消耗大量资源,并且仅在特殊情况下才应使用(顾名思义)。

看看本书的第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)。事实证明,这是遍历数组元素的可怕的成语。



 类似资料:
  • 主要内容:异常简介,异常类型很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊游提前回家。“天降大雨”是一种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。 计算机程序的编写也需要考虑处理这些异常情况。 异常(exception)是在运行程序时产生的一种异

  • 我期望第1行捕获从第0行抛出的NullPointerException,但它没有发生。 但为什么呢?。 当定义了另一个catch块时,为什么第1行的NPE处理程序不能捕获它? 是因为“投掷”直接进入main()方法吗?

  • Java 的异常处理是 Java 语言的一大重要特性,也是提高代码健壮性的最强大方法之一。当我们编写了错误的代码时,编译器在编译期间可能会抛出异常,有时候即使编译正常,在运行代码的时候也可能会抛出异常。本小节我们将介绍什么是异常、Java 中异常类的架构、如何进行异常处理、如何自定义异常、什么是异常链、如何使用异常链等内容。 1. 什么是异常 异常就是程序上的错误,我们在编写程序的时候经常会产生错

  • 问题内容: 我想从用户那里接收Double并处理抛出的异常,以防用户未输入double / int;在这种情况下,我想请用户再次输入金额。如果捕获到异常,我的代码将陷入循环,并继续打印“插入量”。 先感谢您。 问题答案: 你的程序进入时遇到一个无效的输入,因为一个无限循环,并 没有 消耗无效令牌。因此,导致该异常的任何标记都将保留在那里,并在下次您尝试读取double时继续引发异常。 这可以通过以

  • 我使用的是java JDK1.8版本。当我将任何数字除以零(0)时,它会显示消息“infinity”。而它应该在运行时显示ArithmeticException:/zero。原因是什么。

  • 本文向大家介绍浅谈java异常处理(父子异常的处理),包括了浅谈java异常处理(父子异常的处理)的使用技巧和注意事项,需要的朋友参考一下 我当初学java异常处理的时候,对于父子异常的处理,我记得几句话“子类方法只能抛出父类方法所抛出的异常或者是其子异常,子类构造器必须要抛出父类构造器的异常或者其父异常”。那个时候还不知道子类方法为什么要这样子抛出异常,后来通过学习《Thinking in Ja