1. 来源
- 昨天一个朋友问我,ImageIO类中显示实现了私有的无参构造方法,它的作用是什么?
2. 最初的想法
-
刚开始我想,私有的构造方法,一般用于单例模式,正好当时有点事,也没有仔细看,就告诉她应该是实现单例模式的。隔了一会之后,她说:“在该类中没有找到初始化本类对象的方法”。单例模式设计初衷就是为了所有的调用都是用同一个对象,所以私有化了构造方法,使本类之外的其他类不能创建该类对象,但同时也需要提供一个得到该类对象的一个接口。在本类中没有找到创建本类对象,那它就不是单例模式。
-
私有构造
/** * Constructor is private to prevent instantiation. */ private ImageIO() {}
3. 之后的理解
- 晚上闲下来之后,我查看了该类源码,发现其为final类(final类也就意味着不能被其他类继承),然后发现该类提供的方法都为static之后才恍然大悟。该类就是一个工具类,私有构造就是为了别人不能创建该类的对象,对于工具类而言,对象是没有任何意义的。
4. 工具类实现的总结
- 工具类定义为 final,可以防止被别人失误继承。
- 显示定义私有构造方法(默认的无参构造方法在同包中是可访问的)。
- 提供给其他类的工具方法需要定义成 static。