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中变量没有。
错误讯息:
该字段不能声明为静态;静态字段仅在。中声明 静态和顶级类型
B和C类中的String
和int
未收到错误。
完整代码:
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;
}
}
}
答案 0 :(得分:2)
在常规内部类中不能有静态字段/方法,因为内部类只能用于外部类的实例。
因此,静态不能与实例一起存在。
但是他们可以有编译时间常数,请检查JLS 8.1.3。您x
,x1
,x2
不是编译时常量,而s1
,s2
,y1
,y2
是编译时间时间常数
内部类可能不会声明静态初始化器(第8.7节)或成员 接口,或发生编译时错误。
内部类可能不会声明静态成员,除非它们是常量变量(第4.12.4节),否则会发生编译时错误。
答案 1 :(得分:-2)
您可以创建内部类static
。
static class A {
static final Object x = new Object();
static final String s = "s1";
static final int y = 1;
static class B {
static final Object x1 = new Object();
static final String s1 = "s1";
static final int y1 = 1;
static class C {
static final Object x2 = new Object();
static final String s2 = "s1";
static final int y2 = 1;
}
}
}
虽然显然这会使其他事情变得困难。