类
目录
内部类
静态内部类
内部类和静态内部类有何区别,什么场景下用什么?
Java 的内部类和静态内部类都是定义在另一个类的内部的类。
区别:
- 内部类可以访问外部类的成员变量和方法(包括私有成员),而
静态内部类不能访问外部类的非静态成员变量和方法
,只能访问静态成员变量和方法
。 - 内部类的实例依赖于外部类的实例,而静态内部类的实例不依赖于外部类的实例。
- 内部类不能定义静态成员,而静态内部类可以定义静态成员。
- 内部类可以访问外部类的 private 构造方法,而静态内部类不能。
- 静态内部类不会持有外部类实例的引用,因此在内存占用方面比非静态内部类更加轻量级。
场景:
- 若需要访问外部类的非静态成员变量或方法,应该使用内部类。
- 若不需要访问外部类的非静态成员变量或方法,或者需要定义静态成员,应该使用静态内部类。
- 如果内部类对象需要访问其外部类对象,或者需要访问非静态的外部类的成员,就应该使用内部类。
- 如果不需要访问外部类的实例,那么就可以使用静态内部类,这样可以减少内存的使用。同时使用静态内部类可以避免内存泄漏问题。
总结:如果内部类不需要访问外部类的实例变量或方法,或者不需要与外部类实例有任何关联,那么将其定义为静态内部类会更加合适。否则,如果内部类需要与外部类实例进行交互,那么就需要将其定义为非静态内部类。