内部 Class 具有对外部 class 的隐式引用,可能会泄漏内存

Inner Class has an implicit reference to the outer class and may can leak memory

了解内部 class 后,我了解到它隐式引用了外部 class。

但是我的老师告诉我最好的方法是不要使用 inner class,最好使用 static inner class。因为内部class可能会泄漏内存

有人可以解释一下吗?

在你评论的回复中(如果我发在评论里就看不懂了),在它所属的地方。在外部访问内部 class 的示例。

public class Dog {
    String name;
}

public class HugeKennel {
    Double[] memmoryWaste = new Double[10000000];


    public List<Dog> getDogs() {
        SneakyDog trouble = new SneakyDog("trouble");
        return Arrays.asList(trouble);
    }

    class SneakyDog extends Dog {
        SneakyDog(String name) {
            this.name = name;
        }
    }

}

代码中的其他地方

List<Dog> getCityDogs() {
    List<Dog> dogs = new ArrayList<>();
    HugeKennel k1 = ...
    dogs.addAll(k1.getDogs());
    HugeKennel k2 = ...
    dogs.addAll(k2.getDogs());
    return dogs;
}

....

List<Dog> cityDogs = getCityDogs();
for (Dog dog: dogs) {
    walkTheDog(dog);
}
// even though the Kenels were local variables in of getCityDogs(), they cannot be removed from the memory, as the SneakyDogs in the list are still referencing their parent kennels.
//from now on, until all the dogs are not disposed off, the kennels also have to stay in the memory.

因此您不需要通过其父对象 class 访问内部 class,一旦创建了内部对象,它就可以用作任何其他对象并且可以是 'leaked outside' 它的容器 class,就像上面的例子一样,当狗列表将包含对狗的引用时,但每只狗仍然 'know' 关于它的狗窝。

StackTrace 中的链接示例与典型用例相关,当内部 classes 创建为匿名内部 classes 时 'ad hock',但这是同样的问题。如果您传递对内部 class 的任何实例的引用,您也是对外部 class.

的 'passing' 引用