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

Java成员内部类支持非final静态成员的运行原因问询

代码与教材表述不一致的核心原因

你遇到的差异本质是Java版本迭代带来的语法规则放宽,具体说明如下:

  • 旧版本规则(对应教材表述)

    教材里的表述是Java 15及更早版本的强制规范:非静态成员内部类与外部类的实例强绑定,仅允许定义static final修饰的编译时常量作为静态成员,其余静态字段、静态方法、静态代码块均不允许定义,用JDK15及更低版本编译你提供的代码会直接抛出编译错误。

  • 新版本规则调整

    Java 16通过JEP 395(记录类特性)同步修改了嵌套类的语法限制,明确允许非静态成员内部类定义任意类型的静态成员,包括普通静态字段、静态方法、静态初始化块等,不再强制要求静态成员必须是static final常量,你的代码可以正常编译运行,说明你使用的是JDK 16或更高版本的JDK。

你给出的代码运行结果符合Java 16+的语法逻辑:

  1. 首次调用SwimmerAssistant.assist()和读取count时没有创建内部类实例,静态变量count初始值为0,输出0
  2. 两次创建SwimmerAssistant实例时构造器各执行一次count++,最终count值为2,符合静态变量全局共享的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:21:03