为什么Java允许内部类中使用静态方法[重复]

问题描述 投票:0回答:2

Java 不应允许内部类中存在静态方法,但此代码仍可编译并运行。这怎么可能?

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();
    }
}
java static-methods inner-classes
2个回答
3
投票

假设您的导师不是最新的(?)Java 版本。

事实上,在 Java 16 之前,内部类中不可能有

static
方法,但在那个 Java 版本中,这是允许的。

请参阅为什么 Java 16 中的非静态内部类中允许使用静态方法?了解更多信息。

在我撰写本文时(2024 年 10 月 12 日),当前的 Java 版本是 Java 23。


0
投票

对于 Java 15 及更早版本,您的导师是正确的。然而,Java 16 中的规则发生了变化:JEP 395:记录

此 JEP 建议最终确定 JDK 16 中的该功能,其中 以下细化:

  • 放宽内部类不能声明显式或隐式静态成员的长期限制。这将 变得合法,特别是允许内部类声明 是创纪录级别的成员。

顺便说一句,形式上,类

Inner
实际上称为local嵌套类,因为它是方法的本地类,它是否是内部类取决于它是在静态方法还是非静态方法中。

© www.soinside.com 2019 - 2024. All rights reserved.