封闭实例无效时包含类型行为

时间:2014-09-24 16:15:30

标签: 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);
    }
}

我还测试了在打印System.gc()之前调用a,但我不确定它是否实际上触发了一个完整的GC,因此它可能不相关。说实话,在运行代码之前,我不知道它应该发生什么,因为实际的行为对我来说似乎是逻辑的,就好像抛出了一个NPE,因为name被附加到一个实例上。无效。

你能解释一下为什么我们观察它以及封闭类型的确切工作实例吗?

1 个答案:

答案 0 :(得分:6)

实例永远不会无效。这不是Java中存在的概念。无效的是变量,即引用。但是,A实例仍然具有对其封闭实例的有效引用,因此可以使用它。