【问题标题】:Java throws and throw redundant in same method? [duplicate]Java 在同一方法中抛出和抛出冗余? [复制]
【发布时间】:2019-01-18 22:46:29
【问题描述】:

当调用方法无论如何都会捕获throws 时,什么情况会要求方法同时具有throwsthrow。以下面的方法为例,为我的个人程序创建了一个自定义异常。

.....
.....

public String get() throws EmptyQueueException {
 if( planet == mars)
   throw new EmptyQueueException();

 return galaxy;

.....
.....

当然,一个声明,一个实际传递异常,但此方法不负责。我的意思是,如果你知道这个特定的异常会发生,为什么要写两次,考虑到任何一个都会被无论如何都会捕获它的调用方法捕获。一个就够了,为什么还要同时写 throw 和 throws?

【问题讨论】:

  • 一张够吗? throws 声明方法 can 抛出,这是为了强制消费者处理这种情况。 throw 实际上抛出了Exception - 这是一个实现细节。您是否建议我们检查每个库中的所有代码以确定可能引发哪些异常?
  • 一个是不够的。如果你写 throws 而没有 throw,你就是在撒谎,因为该方法实际上并没有抛出异常。如果你写 throw without throws,你就是在撒谎,因为你抛出了一个异常而没有声明这个异常可以被抛出,没有记录它,也没有强制调用者去捕捉它,这就是检查异常的全部意义。
  • 也许你建议应该推断throws
  • 让我们转而使用另一种输入方法,我声明了 throws 'java.io.IOException' 但我没有抛出它。但是另一个使用该方法的方法仍然在它自己的 try & catch 中捕获它作为它的责任。
  • .... 还是一个糟糕的教程

标签: java


【解决方案1】:

在方法声明上抛出,声明方法可能抛出该异常类型,该异常类型将被任何调用方法捕获或管理。 Throw 实际上会抛出异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2014-08-17
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多