《Effective Java》 读书笔记(六)避免创建不必要的对象
2024-08-27 23:55:31
java 有很多修饰类的属性的关键字:常用的static,final
说说final和static吧,平时在编程的时候,这两个关键字很多时候都觉得可有可无,最多的时候就是他们俩同时出现----定义常量的时候,其他时候:1.感觉没有对程序正常运行有任何影响 2.不使用这两个关键字看起来也没什么毛病.
这就是程序员和工程师的区别吧,迈出这一步,写出精品代码:
1.定义一个类的属性的时候,认真考虑这个属性是可变的还是所有对象通用的。将所有对象通用的属性添加static关键字。
下面来看一个实例:
判断一个字符串是否为一个有效的罗马数字:
static boolean isRomanNumeral(String s) {
return s.matches("^(?=.)M*(C[MD]|D?C{0,3})"
+ "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$");
}
程序看起来很简洁,但是每次调用这个方法都会创建一个新的Pattern实例,并且只使用一次。
修改为以下版本:
public class RomanNumerals {
private Pattern roman= Pattern.compile(
"^(?=.)M*(C[MD]|D?C{0,3})"
+ "(X[CL]|L?X{0,3})(I[XV]|V?I{0,3})$"); static boolean isRomanNumeral(String s) {
return roman.matcher(s).matches();
}
}
Effective Java 中提到,在作者电脑上,最开始的方案 输入一个8个字符的字符串需要1.1微妙,但是给roman属性加上static final字段后,输入8个字符字需要0.17微秒,速度提高了6.5倍。
2.优先使用基本类型而不是装箱的基本的类型,装箱的基本的类型是一个对象,每次使用可能都会新建一个对象。
总之,当程序能够重用一个现有的对象的时候,不要创建一个新的对象,但是, 不能过分的追求不创建新的对象,因为创建一个对象和独享的垃圾回收是非常廉价的,相反,如果自己维护自己的对象池,将会使得程序非常麻烦。
考虑一个度:就好Effective Java 中提到:当你应该重用一个现有的对象的时候,不要创建一个对象,当你应该创建一个新的对象的时候,不要重复使用现有的对象。
最新文章
- Excel 实用技巧之一
- Hbase之使用回调函数进行批处理操作
- 省常中模拟 Test2 Day2
- Servlet+Tomcat制作出第一个运行在Tomcat上的Java应用程序
- 国内BI工具/报表工具厂商简介
- BZOJ 1854: [Scoi2010]游戏 [连通分量 | 并查集 | 二分图匹配]
- Aras简单报表
- Linux下用户和raid练习题
- Git 记不住命令
- Tomcat配置域名/IP访问及其中遇到的问题注意事项
- 4:list 列表
- 为什么使用Reazor
- Mevan(转)
- 知识记录——Session与Cookie
- jdk 配置
- bzoj 2115 线性基
- NIO 01 (转)
- oracle insert两个关联表
- vue的事件
- 微信小程序,搜索结果关键词高亮 wxml不能动态识别html标签