当前位置: 首页 > 面试题库 >

构造函数中的异常

狄峰
2023-03-14
问题内容

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

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

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

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

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

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


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 我如何最好地处理以下情况? 我有一个构造函数,需要一些时间才能完成。 我看到了三个选项,每个选项似乎都与众不同。 一种 ,向构造函数添加回调。 第二 ,使用EventEmitter发出“已加载”事件。 或三 ,阻止构造函数。 但我以前从未见过任何完成的事情。 我还有什么其他选择? 问题答案: 鉴于有必要避免在Node中进行阻塞,事件或回调的使用并不奇怪(1)。 稍加修改为2,即可将其与

  • 问题内容: 嘿,我对函数的原型和固有性有疑问。您能否解释一下如何从构造函数返回arr并将此arr添加到原型中? 并且在this.arr中是未定义的。有角度的工厂以及前端和后端之间的连接 问题答案: 将异步操作放入构造函数中特别困难。这有几个原因: 构造函数需要返回新创建的对象,因此它不能返回将告诉您异步操作何时完成的承诺。 如果在构造函数内进行异步操作以设置一些实例数据,并且构造函数返回对象,则调

  • 首先要处理前面已经提到但还没有完全解决的问题。构造函数中发现错误时会发生什么情况? 例如,String 构造函数在 new 失败和无法取得保持 String 的内部表示所需空间时如何响应?问题是构造函数无法返回数值,如何让外部知道对象没有顺利构造呢,一种方案是返回没有正确构造的对象,希望对象使用者通过相应测试确定该对象是不能使用的对象。另一种方案是在构造函数之外设置一些变量。抛出的异常向外部传递失

  • 问题内容: 我最近开始学习JavaFX,并从一本使用JDK 9的书中获得了此代码。运行该程序时,出现了错误。我查看了其他代码,并尝试将’@Override’和“ throws Exception”添加到start方法中,但是出现了相同的错误。构建程序时没有错误。 如果有帮助:我正在使用JDK 11.0.2和openjfx.io的JavaFX。 错误讯息: 问题答案: 如以下文档中所述,您的课程必须

  • 问题内容: 我正在阅读一些代码。在构造函数中,它具有super(),但类实现的接口当然没有构造函数。那么它指的是哪个super()? 问题答案: 指扩展(不是已实现的接口)。在这种情况下是 因此它将在中调用构造函数(不执行任何操作)

  • 问题内容: 我有一个结构,我希望使用一些合理的默认值对其进行初始化。 通常,这里要做的是使用构造函数,但是由于go在传统意义上并不是真正的OOP,所以它们不是真正的对象,也没有构造函数。 我注意到了init方法,但这是在包级别。还有其他类似的东西可以在结构级别使用吗? 如果不是,那么Go中这种事情的公认最佳实践是什么? 问题答案: 实际上有两种公认的最佳实践: 将结构的零值设为明智的默认值。(尽管