编写高质量代码+改善Java程序的151个建议 总结(三)

建议41 让多重继承成为现实--内部类

建议42 让工具类不可实例化

    工具类的方法和属性都是静态的所有访问通过类名进行,并且将构造函数设为private访问权限。工具类一般不做继承的打算,因为子类无法调用父类的构造函数。

建议43 避免对象的浅拷贝

    一个类实现了Cloneable接口就表示它具备了被拷贝的能力,如果再覆写clone()方法就会完全具备拷贝能力。拷贝是在内存中进行的,所以在性能方面比直接通过new生成对象要快很多,特别是在大对象的生成上,这会使性能的提升非常显著。

    我们知道所有类都继承自Object,Object提供了一个对象拷贝的默认方法,拷贝规则如下:

 (1)基本类型

    如果变量是基本类型,则拷贝其值,比如int、float等。

(2)对象

    如果变量是一个实例对象,则拷贝地址引用,也就是说此时新拷贝出的对象与原有对象共享该实例变量,不受访问权限的限制。这在Java中是很疯狂的,因为它突破了访问权限的定义:一个private修饰的变量,竟然可以被两个不同的实例对象访问,这让Java的访问权限体系情何以堪!

(3)String字符串

    这个比较特殊,拷贝的也是一个地址,是个引用,但是在修改时,它会从字符串池(String Pool)中重新生成新的字符串,原有的字符串对象保持不变,在此处我们可以认为String是一个基本类型。

    注意 浅拷贝只是Java提供的一种简单拷贝机制,不便于直接使用。

建议44 推荐使用序列化实现对象得拷贝

     如何利用序列化来完成对象的拷贝呢?在内存中通过字节流的拷贝是比较容易实现的。把母对象写入到一个字节流中,再从字节流中将其读出来,这样就可以创建一个新的对象了,并且该新对象与母对象之间并不存在引用共享的问题,真正实现对象的深拷贝。

建议46 equals应该考虑null值情景

建议47 在equals中使用getClass进行类型判断 不要用instanceof

建议48 覆写equals方法必须覆写hashCode方法


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值