我可以在构造函数中使用throws吗?

i2i*_*eya 4 java exception

我必须在构造函数中初始化文件对象并处理异常,是否有效使用throws或者我应该去try/ catch

Bil*_*ard 13

可以在构造函数中抛出异常.我知道一些Java库类这样做(只有一个例子的URI).我认为抛出异常比返回未知或无效状态的对象更好.

  • 除了坏代码之外,`URL`类不是一个很好的例子.例如,它的`equals`方法将返回不同的值,具体取决于你是否连接到互联网等等.(只是一边不是,你的答案很棒) (3认同)

Pas*_*ent 8

当然你可以抛出异常实际上是我会做的(而不是在构造函数中吞下它).您希望让调用者知道发生了意外情况,您不希望返回未正确初始化的实例.也就是说,这可能表明你在构造函数中做了太多事情.

  • 顺便提一下为什么要投票呢?小心解释一下? (4认同)

小智 6

考虑一个构造函数,或者就此而言任何方法,来签订合同.构造函数的契约非常简单 - 你给我(零,一个或多个)参数,我会给你一个构造对象.好的做法是建议这个对象的内部数据结构应该正确初始化并且不变量完好无损,尽管语言中没有任何内容可以强制执行这一点.

如果由于某种原因构造函数无法持有此契约,那么它应该抛出异常.这可能是因为传递的参数(如果有的话)是不可接受的(前置条件失败)或一些外部问题(文件系统已满,堆耗尽,网络中断等)阻止了它.