构造函数可以抛出运行时异常吗?

时间:2010-02-03 18:54:52

标签: java exception error-handling

当构造函数无法处理的构造函数中的方法抛出异常时,如果你确定应用程序无法处理它并且没有它就没用它就可以捕获并将它们作为运行时异常抛出正在构建的对象?

6 个答案:

答案 0 :(得分:11)

是的,当他们调用其他方法时,这在许多构造函数中是不可避免的,因为他们总有可能已经抛出未经检查的异常。

答案 1 :(得分:11)

是。这是标准做法。

Effective Java, 2nd Ed.中,第61项“抛出适合抽象的例外”涵盖了这一点。是否检查或取消选中生成的异常,还有第58项中的Effective Java,“对可恢复条件使用已检查的异常和编程错误的运行时异常”。

这是构造函数而不是普通方法并不是真正的问题。 (事实上​​,构造函数可以说有更多的自由,因为它们不受超级界面的束缚。)

由于另一个异常而抛出异常时,最好确保在新异常上设置cause

答案 2 :(得分:4)

是的,在构造函数中抛出异常是完全有效的。你很少或没有别的选择,只是为了做到这一点,特别是当你只是想要构建一个对象时,无法正常运行

答案 3 :(得分:2)

完全可以抛出已检查的异常来指示对象的构造失败,正如Chris Jester-Young已经评论过的那样。抛出未经检查的异常是否是一个好主意是另一个问题。你会松开编译器的唠叨,敦促你捕获并处理异常,你肯定会想要这样做。

答案 4 :(得分:1)

是。除非你知道应该如何处理异常,否则最好不要抛弃它,而不是简单地吞下它并打印掉堆栈跟踪(或者更糟糕的是,什么都不做)。

这有助于防止以后出现一些非常难以调试的错误。

答案 5 :(得分:1)

我个人不喜欢看到构造函数抛出已检查的异常(正如doppeldish已经指出的那样)。不过,您怎么能确定应用程序无法处理异常?即使应用程序无法处理它,也许用户可以通过再试一次?