java匿名内部类 final-Java内部类内存图的实现比较复杂,不同类型
由于Java的垃圾回收机制,Java内部类的内存图的实现比较复杂,不同的实现方式会导致内存图的不同。根据内部类的不同类型,内存图可以分为如下几种:1. 普通内部类:普通内部类是指定义在另一个类内部的类。普通内部类会持有一个指向外部类的引用,用于访问外部类的成员变量和方法。当外部类创建一个内部类的对象时java匿名内部类 final,内部类会持有一个指向外部类对象的引用。内存图示例如下:```---------------------------------| 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. 局部内部类:局部内部类是指定义在某一个代码块内的内部类java匿名内部类 final,例如方法内部的类。
局部内部类可以访问外部类的成员变量和方法。当外部类创建局部内部类的对象时,局部内部类会持有一个指向外部类对象的引用。内存图示例如下:```---------------------------------| Outer Class|| - outerVar|| + outerMethod()|| -----------------------------|| Local Inner Class|| - innerVar|| + innerMethod()|| -----------------------------|| + createLocalInner()|---------------------------------```