【发布时间】:2013-05-18 03:16:59
【问题描述】:
所以有人让我解释为什么第一种情况会引发编译器错误,而第二种情况不会:
class Outer {
public Outer() {
Inner i = new Inner();
class Inner {
}
}
}
另一种情况是:
class Outer {
public Boss() {
Inner i = new Inner();
}
class Inner {
}
}
我成功地解释了第一种情况会引发编译器错误,因为在类 Inner 被推入堆栈之前,您无法创建类 Inner 的对象。请随时详细说明或纠正我的理解。
我的主要问题是无法解释为什么我们可以创建一个 Inner 对象,即使类 Inner 的代码位于第二个场景中的构造函数之后。我觉得这个问题的最佳答案是知道内部类在内存中的确切存储位置。 我希望有人可以提供一个可靠的解释。谢谢。
【问题讨论】:
-
在第一种情况下,它不知道这里是什么,所以它会给你编译错误,而第二种情况不是这样,当我们调用
Boss时才会创建该类的一个实例,所以那时,class Inner将被启动.. -
我想你试试这个
class Outer { public Outer() { class Inner { } Inner i = new Inner(); } } -
构造函数,在第二段代码中,应该是
Outer()吧?
标签: java inner-classes