Joe*_*ckx 10
默认情况下,内部类具有对外部类的对象的隐式引用.如果你从外部类的代码中实例化了这个对象,那么这一切都是为你完成的.否则,您需要自己提供对象.
静态内部类没有这个.
这意味着它可以在外部类对象的范围之外实例化.它还意味着如果您"导出"内部类的实例,它将不会阻止收集当前对象.
作为一个基本规则,如果内部类没有理由访问外部类,则默认情况下应将其设置为静态.
静态内部类在语义上更简单。它就像一个顶级类,除了您有更多的可见性选项(例如,您可以将其设为私有)。
避免使用非静态内部类的一个重要原因是它们更复杂。存在对外部类的隐藏引用(甚至可能不止一个)。内部类的方法中的简单名称现在可能是以下三种情况之一:本地、字段或外部类的字段。
这种复杂性的一个工件是对外部类的隐藏引用可能导致内存泄漏。假设内部类是一个侦听器,并且可以是一个静态内部类。只要侦听器被注册,它就会持有对外部类实例的引用,这反过来可能会占用大量内存。使侦听器静态可能允许对外部实例进行垃圾收集。
| 归档时间: |
|
| 查看次数: |
12754 次 |
| 最近记录: |