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

什么时候抛出运行时异常?

司徒宏远
2023-03-14
问题内容

最近,我接受了公司的采访,他们给了我一个编码问题。我得到了与纸牌有关的程序,其中一种方法是将纸牌洗牌。因此,我将该程序编写为:

/** Shuffle the list of cards so that they are in random order 
 * @param d Deck of cards*/
public  static void shuffle(Deck d)
{
    if(d == null)
        throw new IllegalArgumentException();
    Random randomGenerator = new Random();
    List<Card> cards = d.getDeckOfCards();   // cards is basically Linked List.. cards = new LinkedList<Cards>()
    for(int i=0;i<cards.size();i++)
    {
        int randomNumber = randomGenerator.nextInt(52);
        Card c1 = cards.remove(randomNumber);
        Card c2 = cards.remove(0);
        cards.add(0, c1);
        cards.add(randomNumber,c2);
    }

}

在上面的代码中,我引发了我最怀疑的 IllegalArgumentException
。在什么情况下实际上应该抛出运行时异常?我们是否应该实际抛出运行时异常?

谢谢


问题答案:

我们是否应该实际抛出运行时异常?

是的,我们应该。运行时异常有特定的用途-它们发出编程问题,只能通过更改代码来解决,而不是更改程序运行的环境。

在什么情况下实际上应该抛出运行时异常?

当使用类或方法的使用方式检测到错误时,将引发运行时异常。

通常,有两种情况需要抛出运行时异常:

  • 传递无效的参数值 -这是运行时异常的最常见原因。大多数参数验证异常应为运行时异常。Java提供了几个子类来表示这些特定问题。
  • 以错误的顺序调用方法 -这是另一个常见原因。如果在类完成初始化或其他一些准备步骤之前无法调用某些方法,则在错误的时间调用将导致运行时异常。

从这个意义上讲,您的代码很好:它正好适合第一类,即传递无效的参数值。我要做的一件事稍有不同,就是添加一条消息,说明哪个参数具有无效值,但是在您的情况下这并不重要,因为那里只有一个参数。



 类似资料:
  • 我已经用Java编写代码一段时间了。但有时,我不知道什么时候应该抛出异常,什么时候应该捕获异常。我正在做一个有很多方法的项目。层次结构是这样的- 所以目前我正在做的是-我在所有方法中抛出异常并在方法A中捕获它,然后将其记录为错误。 但我不确定这是否是正确的方法?或者我应该开始在所有方法中捕获异常。这就是为什么这种混乱始于我的 - 我什么时候应该抓住异常与何时应该抛出异常。我知道这是一个愚蠢的问题,

  • 问题内容: 在我的应用程序中,有时会引发以下异常: 很难找到错误,因为在stacktrace中没有列出我的方法。那么,有人知道何时抛出此异常吗?感谢您的任何提示。 问题答案: 您可以在stacktrace中看到错误: 适配器的内容已更改,但ListView没有收到通知。确保不从后台线程修改适配器的内容,而仅从UI线程修改。 您应该调查一个线程,并使其与UI线程同步。 在Android中执行此操作的

  • 问题内容: 我担心这是运行时异常,因此应谨慎使用。 标准用例: 但这似乎会强制执行以下设计: 使它回到被检查的异常。 好的,但是让我们开始吧。如果输入错误,则会出现运行时错误。首先,这实际上是统一实施的相当困难的策略,因为您可能必须执行相反的转换: 更糟的是-虽然可以预期客户端代码将以静态方式进行检查,但对于更高级的数据(例如电子邮件地址)却并非如此,或更糟糕的是,必须对数据库进行检查,因此,一般

  • 我担心这是一个运行时异常,所以应该谨慎使用。 标准用例: 但这似乎会迫使以下设计: 将其恢复为检查异常。 好吧,但我们还是继续吧。如果输入错误,则会出现运行时错误。因此,首先,这实际上是一个很难统一实施的政策,因为您可能需要进行相反的转换: 更糟糕的是,在检查

  • 我们应该在什么时候选择抛出一个异常? 我们可以在try catch中捕获此异常。 在哪种情况下,我们选择使用投掷而不是立即接球?是否与设计模式相关?

  • 问题内容: 什么时候应该创建一个检查异常,什么时候应该创建一个运行时异常? 例如,假设我创建了以下类: 我应该如何创建我的?它应该扩展还是?还是我应该只使用它? 问题答案: 在这个话题上有很多分歧。在我的上一份工作中,我们遇到了一些实际问题,运行时异常被遗忘了,直到它们出现在生产环境中(在ageswards.com上),因此我们决定只使用已检查的异常。 在我目前的工作中,我发现在很多情况下都有很多