Java Tutorial说通过使用封闭类的名称来访问静态嵌套类,如新的EnclosingClassNameHere.StaticNestedClassNameHere()
为什么我要创建一个静态类的实例呢?有人可以解释一下吗?
"static"在这种情况下可能会产生误导.它真正意味着该课程可以独立存在.如果没有封闭类的实例,则不能存在非静态内部类.
IMO,当你开始使用它所在的类之外的内部类时,你需要考虑移动它并使它成为自己的顶级类.极少数情况下,类之间的关系如此紧密耦合,您需要将它保持为内部类.
在您的代码示例中:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
Run Code Online (Sandbox Code Playgroud)
您正在创建一个StaticNestedClass的独立实例.
如果它不是静态的,你就不能这样做.您只能StaticNestedClass()从实例创建实例OuterClass.
如果您将其移动到自己的.java文件中,您可以将其视为几乎相同:
StaticNestedClass notNestedAnymore = new StaticNestedClass();
Run Code Online (Sandbox Code Playgroud)
至于你真正的问题:你为什么要创建它的实例?出于同样的原因,您创建了任何类的实例 - 它可以完成您需要的一些工作.
这段代码没什么好混淆的.静态嵌套类只是引入另一个命名空间的一种方法.
通过创建静态嵌套类,您可以表达外部类和内部类之间非常强的关系.通常,嵌套类是辅助对象或外部类的一部分.例如,当您创建一个Tree类时,Node类是嵌套静态类的良好候选者.该Tree.Node清楚地解释了的目的Node类.
实际上,static关键字使用与static字段一致.在这两种情况下,您都可以在static没有封闭类的实例的情况下访问实体.当涉及到static类时,它基本上意味着:" 我可以创建这个静态嵌套类的实例而不需要外部类的实例 ".默认情况下(static不使用关键字时)嵌套类成为内部类.在这种情况下,你不能简单地写:
new OuterClass.StaticNestedClass();
Run Code Online (Sandbox Code Playgroud)
相反,您需要使用一些模糊的语法传递OuterClass 实例:
OuterClass outerClassInstance = new OuterClass();
outerClassInstance.new InnerClass();
Run Code Online (Sandbox Code Playgroud)
幸运的是,当在一个体内new InnerClass()执行时,被隐含地用作封闭实例.OuterClassthis
| 归档时间: |
|
| 查看次数: |
301 次 |
| 最近记录: |