effective java 学习一(创建和销毁对象)

1.使用静态工厂方法(静态方法里返回对象)代替构造器。

  • 静态方法有名字,便于理解。如:from(转化)、of(聚合)、instance(实例)、create(创建)、getObject、
  • 可以实现享元模式,某些方法可以返回某一个对象(存起来)。
  • 可根据参数返回不同的对象甚至对象的子类。

2.遇到多个构造器参数时使用构建器模式

  •  避免大量set、避免多个构造器无法区分问题。

3.单例模式

  • 普通单例模式可以受到反射和序列化的攻击,虽然可以解决,比较麻烦。要保证的只有一个对象,最好的办法是通过枚举实现单例。
  • 实现方式很简单:只有一个实例的枚举类,这个实例就是单例的。

4.只有静态方法的工具类提供私有的构造器

5.依赖注入

  • 一个类的运行往往依赖一系列其他类的功能,为了解耦应该依赖这些类的接口,在当前类使用的时候(实例化)才传入相关的依赖类,可通过构造器或者set方式,这是spring等依赖注入框架的使用原因。
  • spring的依赖注入需要注意,简单的autowire其实有性能消耗的,spring其实更推荐使用构造器或set方式进行注入,因为这样使用者才不会引人冗余的对象。

6.避免创建不必要的对象

  • 有些对象创建成本很高,可以将创建的对象缓存起来,如 正则表达式对象。
  • 有些对象创建一个就行,如适配器对象。

7.清除过期对象的引用

  • 正常的编程中不需要主动清除对象引用,栈帧出栈后局部变量会被自动回收。跟gc roots无关的节点会自动回收。
  • 类自己管理的内存的,比如容器,就需要自己回收过期对象。
  • 不是很重要的内存缓存最好使用weakHashMap(虚引用)。

8.避免使用终结方法和清除方法

就没用过终结方法和清除方法。暂不纠结了,学习一下AutoCloseable接口。

  • AutoCloseable是配合try-with-resources使用的,try的内容执行完后自动调用AutoCloseable接口实现的方法,1.7之前使用try finally{}里关闭资源,finally是由另外线程监听执行的,失效性不强。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值