You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java单例模式中x、y输出值不同的原因及代码位置影响解析

静态成员初始化顺序导致的输出差异分析

原代码输出0、1的原因

Java类加载时,静态成员会按照代码里的声明顺序依次初始化:

  1. 首先执行private static Singleton instance = new Singleton();,触发构造方法调用。此时x和y还没被显式赋值,都是默认的0,构造方法里的x++让x变成1,y++让y变成1。
  2. 接着执行private static int x = 0;,这一步直接把x重新赋值为0。
  3. 最后执行private static int y;,这只是变量声明,没有赋值操作,y保持之前的1不变。
    所以main方法里输出x是0,y是1。

移到位置②后输出1、1的原因

把instance的声明移到x和y之后,静态成员的初始化顺序随之改变:

  1. 先执行private static int x = 0;,x被赋值为0。
  2. 再执行private static int y;,y默认初始化为0。
  3. 最后执行private static Singleton instance = new Singleton();,调用构造方法时x变成1,y变成1,之后没有对x、y的后续赋值操作。
    所以最终x和y都是1,输出1、1。

内容的提问来源于stack exchange,提问作者flower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:22:05