栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当我添加“ this”时,递归初始化器可以工作吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当我添加“ this”时,递归初始化器可以工作吗?

摘要:两个初始化程序都访问一个尚未初始化的字段(因此,其默认值为零)。由于这很可能是编程错误,因此该语言禁止了这种访问的某些简单形式。但是,它不禁止使用更复杂的形式。

该行为符合JLS,特别是第8.3.2.3节。初始化期间对字段的使用限制

只有在成员声明是

static
类或接口的实例字段(分别为)
C
且满足以下所有条件的情况下,成员声明才需要以文本形式出现:

  • 使用情况发生在C的实例(分别

    static
    )的变量初始化程序中或C的实例(分别
    static
    )的初始化程序中。

  • 用法不在作业的左侧。

  • 用法是通过一个简单的名称。

  • C
    是包含用法的最里面的类或接口。

第一个示例满足所有四个条件,因此无效。第二个示例不满足第三个条件(

this.x
不是简单的名称),因此可以。

事件的总体顺序如下:

  • 创建类的实例时,所有字段都将初始化为其类型的默认值。
  • 然后按文本顺序(从上到下)运行初始化程序。

因此,如果初始化程序引用的是稍后在类定义中出现的字段(或字段本身),它将看到该其他字段的默认值。这很可能是编程错误,因此第8.3.2.3节明确禁止。

例如,如果通过使用

this.
前向引用字段来绕过§8.3.2.3
,您将看到默认值(表示零
int
)。因此,以下内容定义明确,可以保证将其设置
x
42

class test {    int x = this.x + 42;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号