美文网首页
Effective Java静态成员类优于非静态成员类

Effective Java静态成员类优于非静态成员类

作者: DZQANN | 来源:发表于2022-06-09 23:00 被阅读0次

    第24条 静态成员类优于非静态成员类

    这一节探讨的是不同内部类之间的使用场景

    嵌套类的分类(感觉不是那么重要,但是需要简单知道一下):

    image.png

    静态成员类

    1. 如果声明成员类不要求访问外围实例,就要始终把static修饰符放在它的声明中,使它成为静态成员类。
    2. 作为公有的辅助类,仅当与它的外部类一起使用时才有意义
    3. 常见的使用场景:代表外围类所代表的对象的组件。(Map.Entry)

    非静态成员类

    1. 非静态成员类的每个实例都隐含着与外围类的一个实例相关联。保存这份引用消耗时间和空间,并且会导致外围实例在符合垃圾回收时却仍然得以保留
    2. 如果嵌套类的实例可以在它外围类的实例之外独立存在,这个嵌套类就必须是静态成员类
    3. 常见的使用场景:iterator

    匿名类

    常见用法:

    • 创建函数对象. 如匿名的Comparator实例.
    • 创建过程对象. 如Runnable, Thread或者TimerTask实例.
    • 在静态工厂方法的内部.

    局部类

    局部类并不是很常用,就不介绍了

    思考

    1. 区分使用静态内部类和非静态内部类的场景,就是看是否可以独立于外部类存在。更为直观的区分方法就是一个内部类如果是外部的组件的话,就是静态的。比如HashMap里面的NodeHashMap的数据存储都是靠Node实现的,Node类就是一个静态内部类
    2. 尽量不要使用非静态内部类,考虑到隐藏的引用。而且非静态内部类可以用Wrapper的方式类实现。比如Iterator,就可以造一个ListIterator(List<T> list),然后next()hasNext就可以通过调用List的方法来实现
    3. 匿名类是一个比较好用的东西,它的优势在于可以减少变量的作用域。比如有一个业务,需要一个方法多线程跑。其实只有这一个小的地方会用到,如果单独造一个类出来的话有点浪费,所以就可以使用匿名类。这样的话也可以相对的提高编译的效率

    第25条 限制源文件为单个顶级类

    一个java文件只定义一个顶层类

    相关文章

      网友评论

          本文标题:Effective Java静态成员类优于非静态成员类

          本文链接:https://www.haomeiwen.com/subject/zzqimrtx.html