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

为何Java允许内部类中定义静态方法?代码可编译运行原因解析

为什么方法内的局部内部类能定义静态方法?

你印象里“Java内部类不能定义静态方法”的规则,其实只针对成员内部类——也就是直接嵌套在外部类中、和成员方法/变量同级的内部类。这类内部类默认会持有外部类实例的引用,所以在Java 16之前确实不允许定义静态方法。

但你代码里的Inner是方法局部内部类:它定义在外部类的方法m1()内部,属于方法作用域内的类。Java 16及之后的版本放宽了对这类内部类的限制,允许局部内部类包含静态方法和静态成员,只要满足两个核心条件:

  • 静态元素不会引用外部的非静态变量/方法(避免依赖外部类实例)
  • 静态元素本身符合Java静态成员的规则(比如不违反访问权限、类型合法等)

你的代码完全符合要求:m2()是静态方法,它引用的j是外部类的静态变量,没有依赖任何外部类实例,所以能正常编译运行,最终输出20。

class Test{
    
    static int j=20;
    public void m1() {
        class Inner{
            public static void m2() {
                System.out.println(j);
            }
        }
        Inner inner = new Inner();
        inner.m2();
    }
    
    public static void main(String[] args) {
        Test obj = new Test();
        obj.m1();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:24:52