Dic*_*ici 2 java garbage-collection inner-classes
我运行了下面的片段,输出了Hey David.
public class Test {
public String name;
public Test(String name) {
this.name = name;
}
public class A {
public String toString() {
return "Hey " + name;
}
}
public static void main(String[] args) {
Test test = new Test("David");
A a = test.new A();
test = null;
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud)
我还测试了System.gc()在打印之前打电话a但我不确定它实际上是立即触发了一个完整的GC,所以它可能不相关.说实话,在运行代码之前,我不知道它应该发生什么,因为实际的行为对我来说似乎是逻辑的,就像NPE被抛出一样,因为它name被附加到一个无效的实例.
你能解释一下我们为什么观察它以及封闭类型的确切工作实例吗?
实例永远不会无效.这不是Java中存在的概念.无效的是变量,即引用.A但是,该实例仍然具有对其封闭实例的有效引用,因此可以使用它.
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |