一尘不染

构造函数可以在Java中引发异常吗?

java

允许构造函数抛出异常吗?


阅读 452

收藏
2020-03-12

共1个答案

一尘不染

是的,构造函数可以引发异常。通常,这意味着新对象可以立即进行垃圾回收(当然,尽管一段时间内可能不会收集到)。如果“半构造”对象在构造函数中较早可见(例如,通过分配静态字段或将其自身添加到集合中),则可能会留下痕迹。

在构造函数中引发异常时要注意的一件事:由于调用者(通常)将无法使用新对象,因此构造函数应注意避免获取非托管资源(文件句柄等),然后引发异常没有释放它们。例如,如果构造函数尝试打开a FileInputStream和a FileOutputStream,并且第一个成功但第二个失败,则应尝试关闭第一个流。如果它是引发异常的子类构造函数,则这将变得更加困难……当然,这都变得有些棘手。这不是经常出现的问题,但是值得考虑。

2020-03-12