【问题标题】:Static fields in inner classes内部类中的静态字段
【发布时间】:2013-03-16 10:46:28
【问题描述】:

如果我有这样的类结构

public class Foo{
    //declaring fields and methods


    Foo(int k){
        Bar.a = k;
    }
    public class Bar{
        public final static int a;
    }
}

如果我创建了许多 Foo 实例,类 Bar 中的静态字段如何作用?我的意思是,它是所有 Foo 对象的同一个实例,还是每个实例都有不同的静态字段?

【问题讨论】:

  • 不,所有实例共享同一个静态字段,不会每个实例都有静态字段。
  • 您的代码无法编译。非静态嵌套类不能包含静态字段。
  • 实际上,如果该字段也是最终字段(这将使其成为常数),他们可以,但我只是很挑剔:)
  • 更新了添加最终修饰符的问题。现在怎么样了?
  • LearnedfromMistake 和 Pshemo 是正确的,您不能在非静态内部类上拥有 modifiable(非最终)静态字段。您的代码仍然无法编译,因为您是:1)没有初始化(现在是最终的)字段a,2)尝试为最终字段分配新值。

标签: java static inner-classes


【解决方案1】:

我认为内部类不能有静态成员,因为它需要外部类的实例。

【讨论】:

    【解决方案2】:

    代码不会编译,编译器会发出

    COMPILATION ERROR : 
    -------------------------------------------------------------
    ... error: Illegal static declaration in inner class blah.Foo.Bar
    1 error
    

    您需要有一个static 内部类才能编译此代码。

    【讨论】:

      【解决方案3】:

      您的问题不正确。只是问一些不存在的东西是没有意义的。在这种情况下,唯一的可能性是创建内部类static。然后对于外部类的每个实例,您都有一个内部类的静态实例。结果是这个内部类的一个静态变量。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-24
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        • 2013-03-12
        相关资源
        最近更新 更多