今天来看提示二十四: 优先考虑静态成员类。
作者上来就介绍了四种嵌套类:静态成员类,非静态成员类,匿名类和局部类。 除了第一种以外,剩下的三种都被称为内部类。
静态成员类
- 静态成员类是最简单的嵌套类。我们可以把它看成是一个普通的类,只是这个类恰好在别的类的内部声明,而且可以访问外围类的所有成员,即使是那些私有成员。
- 静态成员类通常的一个用法是作为一个公有的辅助类,只有与它的外围类一起用时才有意义。
- 没有外部实例的引用,不会造成垃圾回收的问题。
- 通常被用来展示代表外围类对象的组件,如Map内部的Entry。
非静态成员类
- 每个实例都必须与一个外部类实例相关联,可以调用任何外部类实例的方法,可以获取到外部类实例的引用。
- 通常可以用作外部类的适配器,如Map的iterator。
匿名类
- 匿名类并不是它的外围类的一个成员。它不仅与其它成员一起被声明,而且它在被使用时同时被声明和初始化。
- 当且仅当匿名类出现在非静态的上下文当中时,匿名类才有外围实例,但不能拥有除了常量型变量的任何的静态成员。
- 除了在它们被声明的时候之外,你无法去初始化它们。无法声明一个匿名类实现了多个接口或者扩展了一个类并同时实现一个接口。
- 以前常用做创建小的函数对象和处理对象,现在常见实现静态工厂方法。
局部类
- 局部类是最不常用的。在可以声明局部变量的地方就可以声明局部类,而且两者遵循相同的作用域规则。
- 局部类与其它三种嵌套类有着共同的属性。
总结
这一章主要介绍了4中嵌套类,并且极力推荐静态成员类。只要在成员类的实例需要拥有该类外围类的引用的时候才用非静态成员类。至于匿名类,感觉使用起来是比较简单,方便,但是只有在只会从一个地方创建实例而且已经存在一个类型能说明这个类的特征的时候才能够使用,限制比较多。局部类用得就更少了,作用范围更小。
我平时使用的时候还是偏向静态类的,一般用来做一些偏工具性质的类,非静态成员类用得比较少,只在这个类确定只会在当前特定情况下起辅助作用的时候才会使用。匿名类用得倒是更多一点,主要也就是用来起一些匿名的transaction。以后可以结合这些知识点,更合适地使用嵌套类。
网友评论