当内部 class 对象在外部 class 外部创建时,外部 class 对象引用
Outer class object reference when Inner class object is created outside the Outer class
内部 classes 可以使用 Outer_class_object.new inner_class()
在外部 class 外部实例化。但是问题来了,Outer class 对象会发生什么?意味着没有引用它的引用变量。显然它会在堆上,直到内部 class 对象在堆上,因为内部 class 以外部 class 为食。那么在这种情况下 java 使用什么机制呢?
看下面的代码...
我们用来创建内部 class 对象的 NormalInnerClassDemo 主体中的外部 class 对象发生了什么。它必须保持活动状态,直到 'inner' 为 alive.There 没有引用它的引用变量不会使其符合垃圾收集条件吗?如果不是,Java 如何告诉垃圾收集器不要这样做?
class Outer {
private String string = "Google";
class Inner {
public Inner() {
System.out.println("From Inner:" + string );
}
}
public void test() {
//Some code here
}
}
public class NormalInnerClassDemo {
public static void main( String[] args ) {
Outer.Inner inner = new Outer().new Inner();
}
}
首先这是 Java 那么当 VM 为您清理时,您为什么担心堆内存? 8-)
为了帮助您理解这一点,将以下内容添加到外部 class(默认构造函数):
Outer() {
System.out.println("Outer()");
}
然后 运行 程序,你会看到 Outer 也被创建了。很高兴您对 how/what 的创作感兴趣。
Inner classes can be instantiated outside the outer class using Outer_class.inner_class.
不,他们不能。它们是通过以下方式创建的:
outer.new Outer.Inner(...)
其中 outer
是一个 primary-expression,计算结果是对 Outer
实例的引用,例如 new Outer(...)
.
或
this.new Inner(...)
如果您在 Outer
内,或者简称
new Inner(...)
如果你在里面 Outer
.
But the question arises what happens to Outer class object? means there is no reference variable referencing to it.
哦,是的,有:见上文。
Obviously it will be on the heap till the inner class object is on heap because Inner classes feed on outer class. So what mechanism java uses in such situations?
你的问题是错误的。
内部 classes 可以使用 Outer_class_object.new inner_class()
在外部 class 外部实例化。但是问题来了,Outer class 对象会发生什么?意味着没有引用它的引用变量。显然它会在堆上,直到内部 class 对象在堆上,因为内部 class 以外部 class 为食。那么在这种情况下 java 使用什么机制呢?
看下面的代码...
我们用来创建内部 class 对象的 NormalInnerClassDemo 主体中的外部 class 对象发生了什么。它必须保持活动状态,直到 'inner' 为 alive.There 没有引用它的引用变量不会使其符合垃圾收集条件吗?如果不是,Java 如何告诉垃圾收集器不要这样做?
class Outer {
private String string = "Google";
class Inner {
public Inner() {
System.out.println("From Inner:" + string );
}
}
public void test() {
//Some code here
}
}
public class NormalInnerClassDemo {
public static void main( String[] args ) {
Outer.Inner inner = new Outer().new Inner();
}
}
首先这是 Java 那么当 VM 为您清理时,您为什么担心堆内存? 8-)
为了帮助您理解这一点,将以下内容添加到外部 class(默认构造函数):
Outer() {
System.out.println("Outer()");
}
然后 运行 程序,你会看到 Outer 也被创建了。很高兴您对 how/what 的创作感兴趣。
Inner classes can be instantiated outside the outer class using Outer_class.inner_class.
不,他们不能。它们是通过以下方式创建的:
outer.new Outer.Inner(...)
其中 outer
是一个 primary-expression,计算结果是对 Outer
实例的引用,例如 new Outer(...)
.
或
this.new Inner(...)
如果您在 Outer
内,或者简称
new Inner(...)
如果你在里面 Outer
.
But the question arises what happens to Outer class object? means there is no reference variable referencing to it.
哦,是的,有:见上文。
Obviously it will be on the heap till the inner class object is on heap because Inner classes feed on outer class. So what mechanism java uses in such situations?
你的问题是错误的。