gpt4 book ai didi

java - 为什么我不能在内部类中声明和初始化静态变量?

转载 作者:太空宇宙 更新时间:2023-11-04 15:03:34 28 4
gpt4 key购买 nike

A类是外部类。 B类是A的内部类,C类是B的内部类。

所有三个类都声明并初始化一个静态最终变量。

这是A类中的对象:

static final Object x = new Object();

B 类:

static final Object x1 = new Object();

C类:

static final Object x2 = new Object();

问题是 A 类中的变量可以正常编译,但 B 类和 C 类中的变量却不能编译。

错误消息:

the field can not be declare static; static field only declared in static and top level type

String ,和int B 类和 C 类中没有收到错误。

完整代码:

class A {
static final Object x = new Object();
static final String s = "s1";
static final int y = 1;

class B {
static final Object x1 = new Object();
static final String s1 = "s1";
static final int y1 = 1;

class C {
static final Object x2 = new Object();
static final String s2 = "s1";
static final int y2 = 1;
}
}
}

最佳答案

常规内部类中不能有静态字段/方法,因为内部类只能与外部类的实例一起使用。

因此,实例中不能存在静态。

但它们可以有编译时常量,请检查 JLS 8.1.3xx1x2 不是编译时常量,而 s1s2 >、y1y2 是编译时常量

Inner classes may not declare static initializers (§8.7) or member interfaces, or a compile-time error occurs.

Inner classes may not declare static members, unless they are constant variables (§4.12.4), or a compile-time error occurs.

关于java - 为什么我不能在内部类中声明和初始化静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22297722/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com