欢迎使用CSDN-markdown编辑器
来源:互联网 发布:营销推广案例 知乎 编辑:程序博客网 时间:2024/05/16 09:48
Effective Java(2)-创建和销毁对象(上)
这一章的内容主要涉及7个条目
内容大纲
先上一个思维导图^_^,顺便推荐一个在线画图的好工具(Process On),有兴趣的可以试下,非常好用,强烈推荐!
下面让我们细细研究各个条目的内涵。
第1条:考虑用静态工厂方法代替构造器
优势1:静态工厂方法有名称,而构造器没有
什么意思呢?
例子:我们这儿有一个需求,创建一个记录熊的类,熊有狗熊、北极熊、熊猫。
1)我们使用构造器Beer(address, color)创建:
狗 熊 = new Beer(丛林,黑色);
北极熊 = new Beer(北极,白色);
熊 猫 = new Beer(中国, 黑白);
2)我们使用静态工厂方法创建:
狗 熊 = Beer.GouXiong();
北极熊 = Beer.BeiJiXiong();
熊 猫 = Beer.XiongMao();
看到了吧,静态工厂方法有(GouXiong、BeiJiXiong、XiongMao)等名称,我们创建的时候,可以很容易的知道创建的熊的种类。与之相反的是构造器,构造器是没有名称的。
优势2:不必每次调用的时候都创建一个新对象
我们以Boolean.valueOf()为例:
Boolean A = Boolean.valueOf(true);
Boolean B = Boolean.valueOf(true);
我们从Boolean.valueOf()的源码可以看到,每次调用valueOf()时,其实返回的都是TRUE 或者 FALSE实例, 没有创建新的实例,是不是很炫^_^。
优势3:可以返回原返回类型的任何子类型
优势4:创建参数化类型实例的时候,使代码更简洁
对比下面的构造器和静态工厂方法,是不是发现,使用静态工厂方法的更简洁^_^
第2条:遇到多个构造器参数时要考虑用构建器
需求:构造器有多个参数,前两个参数必选,后面的可选
方法1:重叠构造器
如果我只想设置第1、2、6参数的值,那我只能这样调用构造器了:
NutritionFacts cocaCola = new NutritionFacts(240, 8, 0, 0, 0, 27);
我们需要设置所有的参数,但实际上,我们只想设置3个参数而已。
方法2:Java Bean方式
这种方法也比较繁琐,最主要的是多线程并发访问的时候,由于初始化包含多条语句,很容易导致数据不一致。当然,我们可以通过额外的方法保证其线程安全,但这样也带来了额外的开销。
方法3:Builder模式
发现Builder模式的灵活性了吧,我们可以任意增加我们想设置的参数。
这周我们现讲到这儿,下周我们继续讲剩下的5条。。。
第3条:用私有构造器或者枚举类型强化Singleton属性
第4条:通过私有构造器强化不可实例化的能力
第5条:避免创建不必要的对象
第6条:消除过期的对象引用
第7条:避免使用终结方法
扫码关注订阅号“Java技术博文”,更多内容,等你来瞧!
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- Python系列-第一个程序Hello World
- pat-advanced-1033
- hdu 1693 Eat the Trees 插头dp
- 动态调试之雪花直播
- request和response的区别
- 欢迎使用CSDN-markdown编辑器
- JavaScript的循环结构
- 决策树损失函数对Nt的理解
- Maven仓库
- js排序冒泡案例
- 短信验证
- HDU5361In Touch (最短路+并查集)
- 2017-08-05 DBA日记,mysql读书笔记第四天
- Spring整合MyBatis