美文网首页
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文件只定义一个顶层类

相关文章

  • java相关零碎知识

    java初始化,加载顺序: 父类的静态成员变量,父类静态代码块,子类的静态成员变量,子类的静态代码块,父类非静态成...

  • JAVA非静态成员变量的赋值时机

    java 非静态 成员 加载时机是在类加载的时候,在静态成员之后。 非静态成员的赋值,是在自己的构造调用之后,...

  • 创建对象时调用顺序

    创建对象时调用顺序如下: ①先初始化父类和子类的静态成员。 ②父类非静态成员。 ③父类构造方法。 ④子类非静态成员...

  • 新建对象时,构造方法、变量、代码块执行顺序

    场景一:没有父类,或者不关心父类 静态成员(静态代码块、静态变量,按代码顺序执行)非静态成员(非静态代码块、非静态...

  • 提示二十四

    今天来看提示二十四: 优先考虑静态成员类。 作者上来就介绍了四种嵌套类:静态成员类,非静态成员类,匿名类和局部类。...

  • Java_basic_3: static, this 关键字

    static static 静态变量 Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所...

  • C++基础学习

    1. 类的静态成员和非静态成员区别是: 类的静态成员(变量和方法)属于类本身,在类加载的时候就会分配内存,可以通过...

  • 静态与非静态

    静态与非静态的区别:1.在非静态类中,既可以有非静态成员(实例成员),也可以有静态成员;2.在调用实例成员的时候,...

  • static静态成员变量、成员函数的作用

      数据成员可以分为静态变量、非静态变量两种。  静态成员:静态类中的成员加入static修饰符,即是静态成员,可...

  • C#中静态方法和非静态方法的比较

    将从下面4个方面进行比较: 1.静态成员 静态成员属于类所有,非静态成员属于类的实例所有。 每创建一个类的实例,...

网友评论

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

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