eff java 15条
2015-11-08 17:26
218 查看
不可变类最小化
现状:没注意过,对不变类理解不深
原因:不知道为什么要把一个类定义为不可变的
不可变类,好处:
1.线程安全,类的所有属性都可以在多个线程共享,不用同步
2.可以缓存不可变类
3.加快jvm速度
String就是一个典型的不可变类。
设计不可变类的原则:
1.设计为final,个人理解final和不可变类没有必然的联系,这里申明为final,主要是怕在继承的时候破话语义,比如StringChild继承String,StringChild完全可以设计为可变的,下次String str = new StringChild("abc"),还认为str指向的string是不可变的,不就产生歧义了么。
2.私有变量,final。对于final int a,其实可以设计为public,但是若以后要a的类型,改为引用一个对象,那么就只能private了,因为对象内的属性是有可能修改的,所以都申明为private.
3.深度复制,不管创建对象还是输出对象属性
4.不提该修改属性的方法。
现状:没注意过,对不变类理解不深
原因:不知道为什么要把一个类定义为不可变的
不可变类,好处:
1.线程安全,类的所有属性都可以在多个线程共享,不用同步
2.可以缓存不可变类
3.加快jvm速度
String就是一个典型的不可变类。
设计不可变类的原则:
1.设计为final,个人理解final和不可变类没有必然的联系,这里申明为final,主要是怕在继承的时候破话语义,比如StringChild继承String,StringChild完全可以设计为可变的,下次String str = new StringChild("abc"),还认为str指向的string是不可变的,不就产生歧义了么。
2.私有变量,final。对于final int a,其实可以设计为public,但是若以后要a的类型,改为引用一个对象,那么就只能private了,因为对象内的属性是有可能修改的,所以都申明为private.
3.深度复制,不管创建对象还是输出对象属性
4.不提该修改属性的方法。
相关文章推荐
- 进程和线程的关系,同时如何使用Java实现
- Caused by: java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
- Jaxb2 实现JavaBean与xml互转
- Spring横切面(advice),增强(advisor),切入点(PointCut)
- Java基础3笔记
- Struts2和Spring的mvc的区别
- myeclipse使用工具简化数据库开发
- java生成指定范围的随机数
- MyEclipse10中安装activiti插件后,新建activiti项目未显示maven dependencies
- Java中关键字
- 高效敏感词过滤JAVA实现(DFA算法)
- struts2返回json数据配置
- Java容器Treeset的两种排序方法
- java后续学习内容
- MyEclipse导入项目,发现项目编码与文件编码不一致的问题解决
- ubuntu java6 install
- java学习日记----------------为窗口添加背景图
- java继承覆盖总结
- struts2中web.xml的路径问题
- 【Java】 变量和编译时类型和运行时类型不同