创建和销毁对象—Effective Java

本文探讨了Java编程中提升代码质量与性能的多种策略,包括使用静态工厂方法、Builder模式、强化Singleton属性、避免创建不必要的对象、消除过期对象引用及避免使用终结方法等关键实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用静态工厂方法替代构造器

好处有:

  1. 静态工厂方法有名称。当一个函数有不同的构造参数时,可以使用静态工厂方法的名称,来让用户区别该使用哪个具体的实例。
  2. 不需要在每次调用的时候都创建一个新的对象。(单例模式)
  3. 可以返回原返回类型的任何子类型的对象。
  4. 让类构造过程的代码更加简洁。

缺点有:

  1. 若类不包含公有构造函数,则它无法被继承
  2. 没办法像构造函数一样被javadoc标注出来,可以会让用户找不到该如何实例化。

二、遇到多个构造参数时要考虑用构造器(感觉编写起来比较麻烦咯,如果不用考虑线程安全问题,那么多个参数的实例化就使用javabean模式)

  如果直接使用构造函数初始化的话,会造成构造函数参数过多,难以控制。如果使用javabean模式初始化的话,可能会有线程安全的问题。使用Builder模式,既可以保证像使用构造器那样的安全性,又可以得到像使用javabean一样好的可读性。这个builder是它构建的类的静态成员类。

三、四、使用私有构造函数或者枚举类型强化Singleton属性

  就是单例模式的写法,构造起私有化,让客户端不能通过构造起去初始化对象。然后使用private static final属性去实例化一个唯一的对象。另外只包含单元素的枚举类型的写法,比较简洁,有机会可以试试。

五、避免创建不必要的对象

  提高程序性能的方法,少创建不必要的对象,可以节约jvm资源,并节省程序运行时间。(比如把一些在方法中每次需要重复实例化的对象,放到全局变量中,在具体方法中只返回一次)

六、消除过期的对象引用

  防止很隐蔽的程序泄漏,因为把无用的对象引用保存下来,jvm就不会回收这些对象。比如:

1 public Object pop() 
2 { 
3     return elements[--size];  //没有消除elements[size]这个过期引用
4 }

  应该改成:

1 public Object pop()
2 {
3     Object result = elements[--size];
4     elements[size] = null;     //此处消除过期引用,elements[size]所指向的对象也会被jvm回收掉
5     return result;
6 }

七、避免使用终结方法

    终结方法(finalizer)是不可预测的,很危险,不要使用finalizer方法去做一些逻辑。具体有:

  1. 终结方法不能保证自身可以立马执行,因为jvm的回收时间是不可预测的。若在终结方法中关闭连接,可能会造成大量连接持续保留在连接状态而得不到释放。甚至使用system.gc方法也不能保证终结方法一定被执行到。(另外不要使用system.gc方法,会造成程序没必要的卡顿)
  2. 性能损失。销毁一个对象的时间会增大几百倍。

    通常,种植方法是 try{}catch{}finally{} 这么结合使用的,这样可以保证终止方法立马得到执行。

 

转载于:https://www.cnblogs.com/qwblog/p/9986259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值