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

Java静态变量运行结果不一致:BlueJ两次输出不同是否为Bug?

问题复现与原因说明

你遇到的运行结果差异本质是不同IDE运行Java程序时的JVM进程策略不同导致的,结合你给出的更新信息,具体分析如下:

现象还原

你给出的测试代码如下:

public class Bug
{
    private static int x = 0;
    
    public static void main(String[] args){
        System.out.println("\f");
        
        System.out.println(x);
        x=5;
        System.out.println(x);
    }
}

Java中静态变量的初始化仅在类首次被加载时执行一次,只要类不被卸载、JVM进程不重启,静态变量的取值会一直保留。
首次运行所有IDE都会输出0和5,第二次运行时出现差异:

  • Coding Rooms IDE每次运行都会启动独立的JVM进程,类会重新加载,静态变量x会重新初始化为0,输出结果符合Java规范,为0和5
  • BlueJ在安装了「Run Main Method」扩展时,复用同一个JVM进程运行main方法,类只会加载一次,静态变量x的取值会保留上一次运行的修改,因此第二次运行输出5和5

结论

这不是BlueJ核心功能的Bug,是第三方扩展「Run Main Method」的实现逻辑不符合预期导致的,该扩展没有遵循常规IDE每次运行启动独立JVM的设计,复用进程导致静态变量状态残留。

解决方案

  • 禁用或卸载「Run Main Method」扩展
  • 使用BlueJ原生的标准void main(String[] args)入口触发程序运行,即可得到符合规范的预期结果
  • 如果需要保留该扩展,每次运行涉及静态变量的代码前可以重新编译对应类,触发类重新加载重置静态变量状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:03