非静态内部类会持有一个外部类的引用 这是什么意思
时间: 2024-02-18 20:00:45 浏览: 80
Java中的静态内部类详解及代码示例
5星 · 资源好评率100%
非静态内部类会持有一个外部类的引用,意味着在内部类的实例化过程中,会默认地创建一个外部类的实例,并将其引用传递给内部类。
举个例子:
```java
public class OuterClass {
private int num;
public class InnerClass {
public void print() {
System.out.println("num = " + num);
}
}
}
```
在这个例子中,`InnerClass` 是一个非静态内部类,它可以直接访问外部类 `OuterClass` 的成员变量 `num`。当我们实例化 `InnerClass` 时,会默认地创建一个 `OuterClass` 的实例,并将其引用传递给 `InnerClass`。
例如:
```java
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.print(); // 输出 "num = 0"
```
在这个例子中,我们首先创建了一个 `OuterClass` 的实例 `outer`,然后创建了一个 `InnerClass` 的实例 `inner`。在创建 `inner` 的过程中,会默认地创建一个 `OuterClass` 的实例,并将其引用传递给 `inner`。在调用 `inner.print()` 方法时,会访问 `outer` 的成员变量 `num`,输出结果为 "num = 0"。
需要注意的是,非静态内部类持有外部类的引用,会占用额外的内存空间,因此在使用内部类时需要注意内存占用问题。
阅读全文