小编典典

构造函数中的异常

java

在C ++中,对象的生命周期从构造函数成功完成时开始。在构造函数内部,该对象尚不存在。

问:从构造函数发出异常是什么意思?

答:这意味着构造已失败,该物体从未存在,其寿命从未开始。[
来源 ]

我的问题是:Java是否同样适用?例如,如果我移交this给另一个对象,然后构造函数失败,会发生什么情况?

Foo()
{
    Bar.remember(this);
    throw new IllegalStateException();
}

这个定义明确吗?Bar现在是否有对非对象的引用?


阅读 211

收藏
2020-11-19

共1个答案

小编典典

该对象存在,但未正确初始化。

每当this构造期间发生泄漏时(不仅是引发异常时),都可能发生这种情况。

这是一个非常成问题的情况,因为在这种情况下某些公认的担保不成立(例如,final在施工期间字段可能会改变其价值)。

因此,您绝对应该避免this在构造函数中泄漏。

该IBM
developerWorks文章
描述了构造对象时要采取的预防措施以及这些预防措施的背后原因。虽然本文从多线程的角度讨论了该主题,但是当this在构建过程中引用未知/不受信任的代码时,在单线程环境中可能会遇到类似的问题。

2020-11-19