Java 内部类中的静态字段
如果我有这样的班级结构Java 内部类中的静态字段,java,static,inner-classes,Java,Static,Inner Classes,如果我有这样的班级结构 public class Foo{ //declaring fields and methods Foo(int k){ Bar.a = k; } public class Bar{ public final static int a; } } 若我创建了许多Foo实例,那个么类Bar中的静态字段是如何工作的呢?我的意思是,所有Foo对象都是同一个实例,或者每个实例都有不同的静态字段?我认为内部
public class Foo{
//declaring fields and methods
Foo(int k){
Bar.a = k;
}
public class Bar{
public final static int a;
}
}
若我创建了许多Foo实例,那个么类Bar中的静态字段是如何工作的呢?我的意思是,所有Foo对象都是同一个实例,或者每个实例都有不同的静态字段?我认为内部类不能有静态成员,因为它需要外部类的实例。你的问题不正确。只是问一些不存在的事情没有意义。在这种情况下,唯一的可能是使内部类
成为静态的。然后,对于外部类的每个实例,您都有一个内部类的静态实例。结果是这个内部类的一个静态变量。代码将不会编译,编译器将发出
COMPILATION ERROR :
-------------------------------------------------------------
... error: Illegal static declaration in inner class blah.Foo.Bar
1 error
要编译此代码,您需要有一个static
内部类。否,所有实例共享同一个静态字段,不会为每个实例都有静态字段。您的代码不会编译。非静态嵌套类不能包含静态字段。实际上,如果字段也是final(这将使其成为常量),它们可以包含静态字段,但我只是挑剔:)更新问题添加final修饰符。现在情况如何?从错误和Pshemo中学习是正确的,在非静态内部类上不能有可修改(非最终)的静态字段。您的代码仍然无法编译,因为您正在:1)未初始化(现在是final)字段a
,2)尝试为final字段分配新值。