public class Test {
public enum Directions {
NORTH, WEST, SOUTH, EAST
}
static final Directions D1 = Directions.NORTH;
static class Inner {
static final Directions D2 = Directions.NORTH;
}
class Inner2 {
static final Directions D3 = Directions.NORTH;
}
}
我正在获取标题中的IDE-Error,指的是变量D3。有人可以向我解释一下吗?为什么我不能在非静态的内部类中声明静态变量,为什么枚举值不是常量?
答案 0 :(得分:3)
内部类可能不会声明静态成员,除非它们是常量 变量(§4.12.4)或发生编译时错误。
Enum
entry not considered a constant variable? 强> 基本类型或类型String的变量,即final和 用编译时常量表达式(第15.28节)初始化,是 称为常数变量。
答案 1 :(得分:1)
静态意味着它可以在没有任何实例的情况下使用。为了实例化非静态内部类的对象,需要外部类的实例。如果没有外部类的对象,则无法实例化非静态嵌套内部类。
class Inner2 {
static final Directions D3 = Directions.NORTH;
}
Inner2不是静态的。在实例化之前,不能使用Inner2。因此,任何引用或方法只能在实例化后使用。由于Inner2不是静态的,所以D3的存在只有在我们有一个Inner2的对象并且被声明为静态时才有意义。
对于第二个问题,我有另一个相关的疑问,所以我更愿意添加我问过的问题的链接:Why compile time constants are allowed to be made static in non static inner classes?
希望一旦我们回答了这个问题,我们就会有更好的理解。
答案 2 :(得分:0)
移动课程
class Inner2 {
static final Directions D3 = Directions.NORTH;
}
在枚举器之外或者声明它也是静态的
答案 3 :(得分:0)
根据java documentation: 内部类可能不会声明静态初始化器(第8.7节)或成员接口,或者发生编译时错误。
内部类可能不会声明静态成员,除非它们是常量变量(第4.12.4节),否则会发生编译时错误。