是的,构造函数可以引发异常。通常,这意味着新对象可以立即进行垃圾回收(当然,尽管一段时间内可能不会收集到)。如果“半构造”对象在构造函数中较早可见(例如,通过分配静态字段或将其自身添加到集合中),则可能会留下痕迹。
在构造函数中引发异常时要注意的一件事:由于调用者(通常)将无法使用新对象,因此构造函数应注意避免获取非托管资源(文件句柄等),然后引发异常没有释放它们。例如,如果构造函数尝试打开a
FileInputStream和a
FileOutputStream,并且第一个成功但第二个失败,则应尝试关闭第一个流。如果它是引发异常的子类构造函数,则这将变得更加困难……当然,这都变得有些棘手。这不是经常出现的问题,但是值得考虑。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)