effective Java书中创建和销毁对象,对于静态工厂方法说的那么好,为什么我平时都没有接触到呢

Cc_Davis_cC 2016-08-26 07:28:15

public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}

public static <K,V> HashMap<K, V> newInstance() {
return new HashMap<K, V>();
}

就连java之父James Gosling,都说,他多么希望十年前就拥有这么书,管中窥豹,可见一斑。我想问,这种静态工厂方法付出的代价就比构造器低很多吗?还是说这个书有点旧了?
写到这里忽然想到一个问题:实例构造器分为缺省构造器和非缺省构造器。缺省构造器是在一个类没有声明任何构造器的情况下,编译器强制为该类添加的一个无参数的构造器,该构造器仅仅调用父类的无参数构造器。那么又为什么非得强制加一个无参构造器呢?这么说,看来,构造器性能虽然不好,但是还是要用的,不可或缺。就像老婆再丑,也还是要有的一样吧。
话说回来,我倒是用静态变量用的很多,小时候,老师常常教导我们,java类的静态变量有很多好处:一处创建,全局可用,为什么好,说白了,就是方便,引用方便,服从“指挥”--一改全改。
...全文
190 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
HerveyHall 2016-08-29
  • 打赏
  • 举报
回复
先上个链接http://ifeve.com/static-factory-methods-vs-traditional-constructors/ 个人理解: 1、静态方法也是调用了构造器实现的,比如这个
new HashMap<K, V>()
就是在调用HashMap<K, V>的构造器,常见的应用场景如单例模式 2、创建一个类的实例就要调用构造方法,这应该属于语言特性,和性能没什么关系 3、“一改全改”是高耦合的体现,不利于面向对象的编程
江城老金 2016-08-29
  • 打赏
  • 举报
回复
全局变量用起来要小心,用的不好可能会出现多线程问题。 另外,静态工厂方法有以下好处: 1、可以控制实例的数量,可以是单例,也可以是多例; 2、封装实现细节,通过不同的参数,返回不同的实例;比如一个生产汽车的工厂方法,你告诉他,你要一个什么样的车就可以了,不用管他是怎么造的,或者他又去找谁来造。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧