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

允许此引用转义

锺博耘
2023-03-14
问题内容

希望能帮助您理解“ Java并发实践”中的以下内容:

从构造函数中调用可重写的实例方法(既不是私有方法也不是final方法)也可以使this引用转义。

  1. 这里的“转义”是否仅表示在实例完全构建之前,我们可能正在调用实例方法?
    我看不到“ this”以任何其他方式逃避了实例的范围。

  2. ‘最终’如何防止这种情况的发生?我缺少实例创建中的’最终’某些方面吗?


问题答案:
  1. 这意味着在类之外调用代码并传递this
    该代码将假定实例已完全初始化,否则可能会中断。
    同样,您的类可能会假设某些方法仅在实例完全初始化之后才被调用,但是外部代码可能会破坏这些假设。

  2. final方法不能被覆盖,因此您可以相信它们不会传递this
    如果您final在构造函数中为非final类调用任何非方法,则派生类可能会覆盖该方法并传递到this任何地方。

即使调用final方法,也仍然需要确保它们被安全地编写-它们不会传递到this任何地方,并且自身不会调用任何非final方法。



 类似资料:
  • 尝试使用javax中的索引注释时。持久性,Eclipse给了我这个错误。 我在字段之前使用它,在带有注释的类中。 之前,我使用的是org。冬眠注释。索引在完全相同的位置,结果很好。 问题是在我将hibernate-core从4.1.9升级后开始的。最终到4.3.0。Beta3和hibernate-Commons-注释从4.0.1到4.0.2。它说已弃用,并推荐一个。 我找到的所有文档和示例都将放在

  • 我已经编写了这个类以及EventListener注释和一个triggerMail方法—— 但是,在eclipse ide中,它给出了错误此位置不允许注释@EventListener和参数triggerMail的非法修饰符;只允许最终。 如何解决此问题?请帮助。

  • 我试图检查在哪里失去了准确表示大整数的能力。所以我写了这个小片段: 这段代码似乎适用于所有编译器,除了clang。Clang生成一个简单的无限循环。戈德博尔特。 这是允许的吗?如果是,这是QoI问题吗?

  • 我试图让当前的Spring应用程序与WebSphere7默认JMS提供程序一起工作。我已经创建了一个总线,并用它分配了一个队列,还有一个SIB QueueConnectionFactory、一个SIB队列和一个激活规范,并将其与SIB队列链接起来。我确信应用服务器的消息引擎已启动。 这就是我的网络。xml来引用JNDI资源 当我启动应用程序时,它会给我: 是应用程序从WS中引用的队列: 而那应该是

  • 当我在我的网站上加载页面时,我从一些PC上得到错误。 RefernotalLowedMapError 加载Google Maps JavaScript API的当前URL尚未添加到允许引用者列表中。请在谷歌云控制台检查您的API密钥的引用者设置。 参见API密钥 在我测试过的四台机器中,有三台在FireFox上工作正常。 一般来说,这意味着域不是作为引用添加到我的API控制台中,但它确实是,而且它

  • 问题内容: 我正在学习使用课程,而我的作业的一部分是参加汽车课。我在第6行遇到错误,尝试在该行中打印方法的结果。我认为这意味着我正在尝试打印不存在的内容,并且我怀疑这是里程方法。我尝试将其更改为返回英里,但这也没有用。有任何想法吗? 问题答案: 该错误消息告诉您确切的问题是什么-您正试图从不返回结果的方法中提取结果。 而是让方法 返回 字符串,而不是打印出字符串。 我本人将使它成为一种吸气剂方法,