【发布时间】:2019-01-18 22:46:29
【问题描述】:
当调用方法无论如何都会捕获throws 时,什么情况会要求方法同时具有throws 和throw。以下面的方法为例,为我的个人程序创建了一个自定义异常。
.....
.....
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