effective java:创建和销毁对象

第1条:考虑用静态工厂方法代替构造器

  优点:1:静态方法相对于构造器是有名称的;

               当一个类需要多个相同签名的构造器时,可以使用静态方法代替构造器,

               并且选择适当的名字。

             2:不必再没次调用他们时都创建一个新对象。

                如果程序总是创建相同的对象时,并且创建代价很高,则可以使用这项技术提高性能。

             3:可以返回类型的任何子类型对象。

             4:在创建参数化类型实例时 使代码更加简洁。

  缺点:1:类如果不含有公有或者受保护的构造函数 就不能被子类实例化。

             2:它与其他静态方法本质上没有区别。 

getinstance

getnewinstance


第2条:

对象的创建有三种常见方式:

1:通过反射取得对象实例

2:通过clone方式创建新对象

3:通过构造器创建并初始化实例对象

构造器在创建多参数复杂对象实例时:

又有如下三种方式:

          new方式参数列表:当参数过多时,冗长麻烦

          Javabean:动态创建 当被创建完成后可能还没有实例化完全就被调用,线程不安全。

          builder模式:内部类形式,先构造内部类在构造实例安全,可选参数多时用灵活方便,建议使用这种方式



第6条:消除过期的对象

           java会自动帮你回收内存,但这并不代表不需要对内存进行管理。

如果一个栈先是增长然后收缩,那么从栈中弹出的对象不会被回收,因为栈的内部还存在对象的过期引用。这时栈中分为两部分,一部分是活动的 一部分是非活动的 应该清楚非活动的过期引用。

清空过期引用的另一个好处是 如果它们以后又被错误的引用 程序就会立刻报错。

清空对象应该是一种例外,而不应该是一种规范,消除过期对象最好的办法是让引用它的变量结束生命周期。

内存泄漏通常和变量的生命周期联系在一起

内存泄漏通常和集合联系在一起。

1:只要类事自己管理内存 程序员就应该注意内存泄漏问题。

2:内存泄漏另一个常见来源是缓存

3:内存泄漏常见来源的监听器和其他回调。



第7条:避免使用终结方法

finalizer通常是不可预测的,也是很危险的 一般情况下是不必要的,使用这个方法会导致行为不稳定,降低性能以及可以移植性问题。

如果用终结方法关闭已经打开的文件,这是严重错误的,因为打开文件的描述符是一种有限的资源,由于jvm会延迟执行终结方法,所以大量文件会保留打开状态,当一个程序不能再打开文件时,他可能会失败。

显示的终结方法通常与trycatch结构一起使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值