java - 封闭实例无效时的封闭类型行为

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

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

您能解释一下为什么我们观察到这一点以及封闭类型的实例究竟是如何工作的吗?

最佳答案

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

关于java - 封闭实例无效时的封闭类型行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021770/

相关文章:

java - 是否可以像 Google 钱包一样使用 NFC?

java - 即使内存被回收,并发模式也会失败

java - young GC 暂停与 STW 暂停

c# - Windows 服务中的计时器在一两天后停止触发,GC 或错误逻辑?

java - 如何从另一个类中定义的类创建数组

c++ - 如何设计一个始终是另一个类的成员的类

java - 最近任务中的应用程序名称更改

java - Rest API 资源包含点,最后一部分被截断

java - 即使在 100 个并发请求中,Tomcat 也会挂起

java - 静态嵌套类可以完全访问私有(private)外部类成员吗?