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

Java中匿名内部类能否使用static块与static变量?

Java匿名内部类的static成员兼容性问题解析

我在YouTube视频中了解到Java的匿名内部类无法使用static块与static变量,但编写如下测试代码后,本地运行无报错,而视频演示及在线编译器却提示错误。请问该差异产生的原因是什么?Java的匿名内部类到底能否使用static块与static变量?

测试代码

package Anonymous;

public class main {
    public static class TestClass {

        public void TestMethod() {
            System.out.println("test");
        }
        
    }
    public static void main(String[] args) {
        TestClass test = new TestClass() {
            static int p = 5;
            final static int y = 5;

            static {

            }

            @Override
            public void TestMethod() {
                System.out.println("test 2");
            }
        };
        test.TestMethod();
    }
}

差异核心原因:Java版本规则变更

这种差异完全是Java版本不同导致的——不同版本的Java语法规则对匿名内部类的static成员限制不一样:

  • Java 16及更早版本:
    官方语法明确禁止匿名内部类声明非final的static变量、static块,只允许final static修饰的编译期常量(比如你代码里的final static int y = 5;)。视频演示和在线编译器用的是这些旧版本,所以会触发语法错误。

  • Java 17及之后版本:
    JDK放宽了这个限制,匿名内部类可以像普通类一样声明static变量、static块甚至static方法。你的本地环境用的是Java 17或更高版本,因此代码能正常编译运行。

结论

匿名内部类能不能用static变量/块,直接看Java版本:

  • Java 16及更早:仅支持final static编译期常量,其他static成员均不允许。
  • Java 17及之后:所有static成员(变量、块、方法)都可以正常使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:22:26