java+静态初始化数据_java-静态数据如何初始化?

A classes static initialization normally happens immediately before

the first time one of the following events occurs:

an instance of the class is created,

a static method of the class is invoked,

a static field of the class is assigned,

a non-constant static field is used, or

for a top-level class, an assert statement lexically nested within the class is executed.

那么如何在内部完成呢?每条可能触发初始化的指令都包含if?任何工作的细节:-)实施对我来说都很好.

我正在用“ Java”标记问题,但如果我没有记错的话,C#和Swift也会按需初始化静态数据(通常).

解决方法:

正如评论中提到的那样,可以通过segfaults来完成这种事情,但是对于Java而言,这并不是必须的.

请记住,Java字节码不是由机器直接执行的-在将JIT编译成真实的机器指令之前,先对其进行解释和分析以确定何时编译它,这已经涉及到每个字节码执行很多机器指令.指令.在这段时间内检查静态初始化的所有条件都没问题.

字节码也可以与检查一起编译成机器代码,在第一次执行检查后将其重写或打补丁.这种事情也可能由于其他许多原因而发生,例如自动内联和转义分析,因此像这样进行静态初始化检查不是什么大问题.

简而言之,有很多方法,但是关键是当您运行Java程序时,除了实际编写的代码外,还有很多其他事情在进行.

标签:static,java

来源: https://codeday.me/bug/20191119/2034543.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值