有时候为了避免内存泄露,使用静态内部类来取代非静态内部类,为什么呢?
------解决方案--------------------
非静态内部类的对象默认包含了它的Container的引用,比如:
class A{
class B{
}
}
B的对象中默认有一个A的引用,垃圾回收的时候,如果处理不当,有可能导致A的对象不能被回收,导致内存泄漏。
------解决方案--------------------
你要一个静态内部类(题外话:static的不叫内部类,叫:nested class)实例的时候,你并不需要一个外部类的实例(Enclosing Instance),比如:
- Java code
class T { static class Nested { void sayHello() { System.out.println("hello"); } }}class C { public static void main(String... args) { new T.Nested().sayHello(); //不需要外部类T的实例,这里T只是一个类Nested的限定名称的一部分 } }
------解决方案--------------------