关键字“new”是如何工作的,尤其是当我启动静态嵌套类时? [复制]
Posted
技术标签:
【中文标题】关键字“new”是如何工作的,尤其是当我启动静态嵌套类时? [复制]【英文标题】:How the keyword 'new' works especially when I initiate static nested class? [duplicate] 【发布时间】:2015-11-21 12:00:29 【问题描述】:public class NestedClassTest
public static void main(String[] args)
OuterClass.NestedClass nestedObject = new OuterClass.NestedClass();
nestedObject.printX();
OuterClass outerObject = new OuterClass();
//OuterClass.InnerClass innerObject = new outerObject.InnerClass(); //Error!
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
innerObject.printY();
//OuterClass.NestedClass objectOfNested2 = outerObject.new NestedClass(); //Error!
class OuterClass
static int x = 10;
int y = 100;
static class NestedClass
void printX()
System.out.println(x);
class InnerClass
void printY()
System.out.println(y);
我在处理嵌套类和内部类。困难的部分是当我尝试使用关键字new
启动内部类时。
我预计 new outerObject.InnerClass()
会像
new OuterClass.NestedClass()
做到了。它没有用,但只有outerObject.new InnerClass()
有效。对我来说,关键字new
出现在一个变量之后(在我的例子中是outerObject
)看起来非常诡异和混乱。为什么会这样?这背后的逻辑是什么?
此外,outerObject.new NestedClass()
不起作用,这对我来说意味着更多的谜团。
请有人帮我详细了解关键字new
的工作原理。
【问题讨论】:
【参考方案1】:内部类的实例属于外部类的特定实例(这就是它不同于静态嵌套类的原因)。你必须说 outerInstance.new InnerClass()
来告诉 Java 是哪个外部实例。
另一方面,静态类没有关联的外部实例,所以你通常只需用new
指定类名(实际上你可以直接导入嵌套类,然后你可以直接说@ 987654323@).
【讨论】:
以上是关于关键字“new”是如何工作的,尤其是当我启动静态嵌套类时? [复制]的主要内容,如果未能解决你的问题,请参考以下文章