java高效编程_Java高效编程

非可变类就是类的实例不能被修改的类。如String。

14621_658486_1.png非可变类有很多好的存在理由非可变类更容易设计、实现和使用

不易犯错误

更安全

为了使类成为非可变的,要遵循下面5条原则14621_658486_2.png不要提供任何修改对象的方法。

14621_658486_3.png保证没有可以被重载的方法。这防止了粗心的或恶意的子类危害对象的不可变行为。防止方法被重载的一般方式是是类成为final的。

14621_658486_4.png使所有的域成为final。

14621_658486_7.png使所有的域都是私有的。

14621_658486_8.png保证对任何可变组件互斥访问。

下面是一个稍微复杂的例子:

public final class Complex {

private final float re;

private final float im;

public Complex(float re, float im) {

this.re = re;

this.im = im;

}

public float realPart()        { return re; }

public float imaginaryPart()        { return im; }

public Complex add(Complex c) {

return new Complex(re+c.re,im+c.im);

}

...

public boolean equals(Object o) {

if(o==this)

return true;

if(!(o instanceOf Complex))

return false;

Complex c = (Complex) 0;

return(Float.floatToIntBits(re) == Float.floatToIntBits(c.re) ) &&

(Float.floatToIntBits(im) == Float.floatToIntBits(c.im));

}

public int hashCode() {

int result = 17 + Float.floatToIntBits(re);

result = 37*result + Float.floatToIntBits(im);

return result;

}

public String toString() {

return "("+re+" + "+im+"i)";

}

}

这个类表示复数,注意到算术操作创建和返回一个新的复数实例,而不是修改了这个实例。

14621_658486_1.png非可变对象本质上是线程安全的,不需要同步机制。这是获得线程安全最简单的途径。线程不会看到其他线程对非可变对象施加的影响,因而,非可变对象可以被自由地共享。

14621_658486_1.png非可变对象可以提供一个静态工厂,将经常被请求的实例缓存起来,避免在被请求的实例存在时,重复地创建新的实例。BigInteger和Boolean类都具有这种静态工厂方法。

14621_658486_1.png不仅可以共享非可变对象,还可以共享它们的内部信息。

14621_658486_1.png非可变对象为其他对象——无论是可变还是非可变的,创建了大量的构造块。

14621_658486_5.png非可变对象的真正也是唯一的缺点是对每个不同的值要求一个单独的对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值