内部类的内存图

 内部类对象里面有一个隐藏的 this,用来记录外部类的地址值

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
由于Java的垃圾回收机制,Java内部类内存的实现比较复杂,不同的实现方式会导致内存的不同。根据内部类的不同类型,内存可以分为如下几种: 1. 普通内部类: 普通内部类是指定义在另一个类内部的类。普通内部类会持有一个指向外部类的引用,用于访问外部类的成员变量和方法。当外部类创建一个内部类的对象时,内部类会持有一个指向外部类对象的引用。内存示例如下: ``` --------------------------------- | Outer Class | | - outerVar | | + outerMethod() | | -----------------------------| | Inner Class | | - innerVar | | + innerMethod() | | -----------------------------| | + createInner() -> Inner Obj | --------------------------------- ``` 2. 静态内部类: 静态内部类是指定义在另一个类内部,并被static修饰的内部类。静态内部类不会持有外部类的引用。它可以直接访问外部类的静态成员变量和静态方法。当外部类创建一个静态内部类的对象时,不会持有指向外部类对象的引用。内存示例如下: ``` --------------------------------- | Outer Class | | - outerVar | | + outerMethod() | | -----------------------------| | Static Inner Class | | - innerVar | | + innerMethod() | | -----------------------------| | + createStaticInner() | --------------------------------- ``` 3. 匿名内部类: 匿名内部类是指没有名称的内部类,用于简化代码和实现接口的抽象方法。匿名内部类在创建对象时会自动创建一个对象,并将该对象作为返回值返回,而不需要调用构造方法创建对象。匿名内部类可以访问外部类的成员变量和方法。当外部类创建一个匿名内部类的对象时,匿名内部类会持有一个指向外部类对象的引用。内存示例如下: ``` --------------------------------- | Outer Class | | - outerVar | | + outerMethod() | | -----------------------------| | Anonymous Inner Class | | + innerMethod() | | -----------------------------| | + createAnonymousInner() | --------------------------------- ``` 4. 局部内部类: 局部内部类是指定义在某一个代码块内的内部类,例如方法内部的类。局部内部类可以访问外部类的成员变量和方法。当外部类创建局部内部类的对象时,局部内部类会持有一个指向外部类对象的引用。内存示例如下: ``` --------------------------------- | Outer Class | | - outerVar | | + outerMethod() | | -----------------------------| | Local Inner Class | | - innerVar | | + innerMethod() | | -----------------------------| | + createLocalInner() | --------------------------------- ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值