可以使用Outer_class_object.new inner_class()
在外部类之外实例化内部类。但问题出现了外类对象会发生什么?表示没有引用它的引用变量。显然它将在堆上,直到内部类对象在堆上,因为Inner类以外部类为基础。那么java在这种情况下使用什么机制?
请参阅以下代码...
我们用于创建内部类对象的NormalInnerClassDemo主体中的外部类对象会发生什么。它必须保持活力,直到内心的'是没有参考变量指的是它没有资格进行垃圾收集?如果不是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();
}
}
答案 0 :(得分:1)
可以使用Outer_class.inner_class在外部类之外实例化内部类。
不,他们不能。它们是通过以下方式创建的:
outer.new Outer.Inner(...)
其中outer
是一个主表达式,用于计算对Outer
实例的引用,例如new Outer(...)
。
或
this.new Inner(...)
如果你在Outer
内,或简称
new Inner(...)
如果你在Outer
内。
但问题出现了外类对象会发生什么?表示没有引用它的引用变量。
哦,是的,有:见上文。
显然它会在堆上,直到内部类对象在堆上,因为Inner类以外部类为基础。那么java在这种情况下使用什么机制?
你的问题是建立在一个错误的基础上的。
答案 1 :(得分:-1)
首先这是Java,所以当VM为你清理时你为什么担心堆内存? 8 - )
为了帮助您理解这一点,请将以下内容添加到外部类(默认构造函数):
Outer() {
System.out.println("Outer()");
}
然后运行程序,你也会看到Outer也被创建了。很高兴您对如何/创造了什么感兴趣。