非静态成员类

向大师学习怎样使用嵌套类

爷,独闯天下 提交于 2020-02-28 11:46:09
图1 嵌套类 如上图一所示是嵌套类的分类和一些使用策略,主要需要注意的就是,嵌套类主要是为外部类服务的,最好是仅仅在外部类中使用,如在其他类中需要使用另外一个类的嵌套类,那么该嵌套类就应该做为顶级类,而不是嵌套类。 如果需要使用嵌套类,那么优秀考虑静态成员类,可以参考 effictive java 2版 22节 优先考虑静态成员类 。因为每一个非静态成员类的实例会维护一个外部类的实例,所以有空间和时间的开销。如果确实需要外部类的实例引用,例如要直接访问外部类的飞静态成员变量等,那么就可以考虑非静态成员类。 如果只需要类的一个实例,并且有预置类型,例如很多继承Thread的类,或者实现Runnable的类就可以做成匿名类。如果没有预置类型就可以考虑局部类。 上面讲了一些原因和策略,下面来看一下具体的应用,我们以LinkedList的源码为例,LinkedList也是Josh Block写的,代码里面对于嵌套类使用应该是对嵌套类使用的最佳实践了。 package java.util; /** * * List 和 Deque双向链表的实现 * */ public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io