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

Java静态最终字段初始化顺序

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

Java静态最终字段初始化顺序

静态最终成员先于其他静态成员初始化。

非最终静态成员按出现顺序初始化

因此,在您的第一种情况下:

    static Test t=new Test();    static int a=5;

构造函数在

a
初始化之前首先被调用,因此
a=0
被显示。

在第二种情况下,

static finala
在之前初始化
t
,因此
a=5
Test
创建的第一个实例时显示。如果
a
不是静态的,则在执行构造函数之前对其进行初始化,因此再次
a=5
显示。

关于您的问题中的编辑。

查看JLS的12.4.2节:

  1. 然后,初始化其最终值是 编译时常量表达式
    的接口的最终类​​变量和字段(第8.3.2.1,第9.3.1,第13.4.9,第15.28节)。


  1. 接下来,以文本顺序执行类的类变量初始化器和静态初始化器,或接口的字段初始化器,就好像它们是单个块一样。

您会看到,仅当final类变量(即static
final)的值是编译时常量表达式时,它们才在其余静态变量之前初始化。

5
是一个常量表达式。
newTest()
不是。因此即使它们都是静态的final也会
a
被初始化
t



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

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

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