java - java内部类对象如何存在于内存堆中?

标签 java jvm heap-memory inner-classes

class Outer {
    int o = 10;
    class Inner {
        int i = 20;
    }    
}

public class Demo {
    public static void main(String args[]) {
        Outer o = new Outer();
        Outer.Inner oi = o.new Inner();
    }
}

当我们通过外部类对象创建内部类对象时,它们如何在堆中相互关联?

最佳答案

基本上,编译器隐式创建一个构造函数,引用外部类,该外部类存储在隐藏字段中。所以你的代码有点是这样的:

class Outer {
    int o = 10;
    static class Inner {
        private final Outer outer;
        int i = 20;

        Inner(Outer outer) {
           this.outer = outer;
        }
    }    
}

public class Demo {
    public static void main(String args[]) {
        Outer o = new Outer();
        Outer.Inner oi = new Outer.Inner(o);
    }
}

(请注意,我已将内部类转换为静态嵌套类。)

关于java - java内部类对象如何存在于内存堆中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22857744/

相关文章:

c - 如何保存栈和堆

java - 如何使用 Spring Security 重新加载用户更新权限

java - 静态变量(全局变量)如何成为Java中的对象?

java - 从特定索引范围内的 java.util.List 获取项目

java - 用于集成测试的内存数据库架构创建失败

java - 当 jar 文件被删除时优雅地关闭 jvm

java - JVM 和 GC 调整 - 无 Full GC 的理论

java - 将证书导入 cacerts 在 Mac OS Mojave 上出现文件 I/O 异常

java - 在Java中,全局变量总是放在堆上吗?

java - 程序效率和java.lang.OutOfMemoryError : Java heap space