第五条:避免创建不必要的对象
1, 有个一典型的例子
String s=new String(“a”);
这个语句每次都都创建一个新的string实例。但是这没有必要。你可以这么写。
String s=”a”;
这样就避免了创建一个新的string实例。
2, 对于同时提供了静态工厂方法和构造器的不可变类,通常可以使用静态工厂方法而不是构造器,以避免创建不必要的对象。构造器在每次调用的时候都会创建一个新的对象,而静态工厂方法则从来不要求这么做,实际上也不会这样做。
3, 请使用static方法和static变量来表示定值的数据,这样可以有效的避免重复创建定值的对象。
4, 如果在一个类中,需要使用静态方法实例的方法,并没有使用静态方法,那么你可以考虑延迟初始化(lazily initializing),但是这么做会让实现复杂化,也会影响性能。
5, 我们讨论不创建重复对象,显然这个对象是不可变的,是可以重用的。但是有些情况并不这么明显。例如适配器(adapter)的情形,有时也叫做视图(view),适配器就是指这样一个对象:它把功能委托给一个后备对象(backing object),从而为后备对象提供一个可以替代的接口。由于适配器除了后被对象之外,没有其他的状态信息,所以针对某个给定对象的特定适配器而言,它不需要创建多个适配器实例。
例如,Map接口的keySet方法返回该Map对象的Set视图,其中包含该Map中的所有键(key),好像每次调用keySet都应该创建一个新的Set实例,但是对于一个给定的Map对象,实际上每次调用keySet都返回同样的Set实例。因为他们由同一个Map实例支撑。
6, 在jdk1.5中,有一个创建多余对象的新方法,叫做自动装箱(autoboxing),注意,要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。
7, 对于小对象的创建,其代价是很廉价的。
8, 重用对象需要付出的代价要远远大于因创建重复对象而付出的代价,必要时如果没能实施保护性拷贝,将会导致潜在的错误和安全漏洞,而不必要的创建对象则只会影响程序的风格和性能。
分享到:
相关推荐
《Effective Java》第三版中文版目录 第一章 介绍 1 第二章 创建和销毁对象 4 1 考虑用静态工厂方法替换构造器 4 2 当遇到多个构造器参
effective-java.pdf
Effective Java读书笔记.pdf
Effective java 3 学习记录
《Effective_C#中文版:改善C#程序的50种方法》读书笔记
effective java 读书笔记,第二版自己摘要并翻译,以备速查。
Effective Java读书笔记,记载了大部分我觉的有用的东西,前半部分有代码说明,但后半部分的代码,太过琐碎,就没有整理
【Effective Java】阅读笔记markdown 文件
effective-java 配套代码
java7 hashmap源码 Effective Java 3th 索引 创建和销毁对象 考虑使用静态工厂方法代替构造方法 优点: 有名字 每次调用的时候,不一定要创建新的...避免创建不必要的对象 用 String str = "abcd";而不是String str= n
15. 使类和成员的可访问性最小化 16. 在公有类中使用访问方法而非公有域 17.使可变性最小化:不可变类
Effective+C#中文版:改善C#程序的50种方法.rar
《Effective Java》读书分享.pptx
The books in this series provide the detailed information developers need to build effective, robust, and portable applications and are an indispensable resource for anyone using the Java platform. ...
Effective Java Effective Java Effective Java
effective_java_new:Effective_java_new
构建高效的Java企业级系统是项困难的工作。本书详细介绍企业级计算技术中的常见问题,并描述使用企业级Java平台技术处理这些问题的方法。本书以若干条建议、揸南的形式,言简意赅地介绍了J2EE开发中的微妙之处。无论...
Effective Enterprise Java