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字段分配新值。