繁体   English   中英

java 内部类中 static 成员的使用

[英]Usage of static members in Inner Classes in java

我知道 java 中的内部类不能有 static 成员,除非它们被声明为最终成员。 但是理论上不应该在本地 class 中声明 static 成员吗?

例如。

public class OuterClass
{
  class innerClass
  {
    public static int i = 1;
  // inner class code goes here
  }
}

我知道内部 class 的标准初始化是这样发生的:

OuterClass outerClass = new OuterClass();
OuterClass.innerClass innerclassInstance = outerClass.new innerClass();

但是为什么不这样呢??

OuterClass outerClass = new OuterClass();
outerClass.innerClass innerclassInstance = new outerClass.innerClass();

每当创建 OuterClass 的实例时,它还包含一个 innerClass 的副本。 因此,如果静态(仅 static 但不是 final )成员被允许存在于 innerClass 中,那么它们应该(或可以)以这种方式访问

outerClassInstance.innerClass.member

我想错了方向吗? 内部类的设计方式有什么特别的原因吗?

希望我清楚。 对不起我的英语不好。

但是理论上不应该在本地 class 中声明 static 成员吗?

An inner class is implicitly associated with an object of its outer class, so the existence of the InnerClass class depends completely on each of the enclosing objects of OuterClass class.

让我们想象一下,您没有将“i”声明为 final,而是创建了 OuterClass class 的实例 a 和 b,这两个实例相互独立。 我们可以设置:

OuterClass a = new OuterClass();
OuterClass.InnerClass a1 = a.new InnerClass();
a1.i = 9;

OuterClass b = new OuterClass();
OuterClass.InnerClass b1 = b.new InnerClass();
b1.i = 18;

嗯,一个static变量有两个不同的值,并行存在,相互独立(因为a和b相互独立)。

它不会发生,因为 static 变量本质上是全局变量。 class InnerClass 的所有实例必须共享相同的 static 变量。

但是为什么不这样呢??

OuterClass outer = new OuterClass(); //I modified the variable name to avoid confusion
outer.InnerClass innerclassInstance = new outer.InnerClass();

按照惯例,

Type name = new Type();

,所以外部(名称)无法解析为类型。

你可以这样做:

OuterClass.InnerClass innerclassInstance = new OuterClass().new InnerClass();

希望我的回答可以帮到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM