Immutable Pattern

什么是Immutable Pattern?

举个例子,java.lang.String这个类没有提供任何改变字符串属性的方法,也就是说,String实例所代表的字符串属性不会改变。因此,String的方法都不需要synchronized。

可以将一个类声明为final,保证不允许别人定义它的子类,可以将它的字段设置为private,只能在内部看到。


都没有什么能改变它,他当然能被多个线程自由访问。


什么时候使用Immutable Pattern?

1、当实例产生后,状态不再变化

2、实例需要共享,而且访问很频繁。当使用immutable pattern的时候,最大的优点就是线程安全而且效率高,有时候,省下synchronized可以增加很大的效率。


成对的mutable类和immutable类

将同一个类的设计分为可变和不可变的,可变的类内部使用synchronized方法保证线程安全,不可变的类保证程序运行速度。

JDK中就存在这样的类,像是java.lang.String和java.lang.StringBuffer。String不可变速度快,StringBuffer可变,然而内部使用了synchronized方法保证了线程安全。同时StringBuffer里存在一个String作为参数的构造器,而String里也有StringBuffer作为参数的构造器。

对于基本数据类型也存在这样的成对关系,将首字母大写即可(包装类)。里面有一个特例,void与java.lang.Void,后者无法建立实例,这个类作用只是用来保存基本类型void的Class对象的实例,使用在反射和序列化等机制上。


final关键字

final类:使类无法被继承,该类方法也不会被覆盖

final方法:这个方法如果是实例无法被子类覆盖,如果是类方法,无法被子类隐藏(对于父类的类方法,方法无法被覆盖,只是被隐藏了)

final字段的值只能指定一次,第一种是在声明是就赋值,另一种则是在构造器中赋值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值