创建和销毁对象
转载请注明出处:http://lt200819.iteye.com/blog/1707699
第1条:考虑用静态工厂方法代替构造器(静态工程方法不同于设计模式中的工厂方法)
静态工厂方法与构造器不同的优势在于:
1.它们有名称;
2.不必每次调用它们的时候都创建一个新的对象,类似单例模式。
3.可否返回原返回类型的任何子类型的对象。(服务提供者框架)
4.在创建泛型示例时,他们使代码变得更加简洁。(JDK1.6还没实现)
缺点:
1.类如果不含有公有的或者受保护的构造器,就不能被子类化(不能被继承,因为super()无法调用)
2.与其他的静态方法实际上没任何区别。
惯用名称:valueOf; of; getInstance; newInstance; getType;newType
第一反应用静态工厂
第2条:遇到多个构造器参数是要考虑用构建器
如果类的构造器或者静态工厂中具有多个参数,设计这种类时,Builder模式就是种不错的选择,特别是当大多数参数都是可选的时候。与使用传统的重叠构造器模式相比,使用Builder模式的客户端代码将更易于阅读和编写,构建器也比JavaBeans更加安全(JavaBeans需要考虑线程同步)。
第3条:用私有构造器或者枚举类型强化“单例”属性
包含单个元素的枚举类型实现单例,在功能上与公有域方法相近,但是它更加简洁,无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。虽然这种方法还没有广泛使用,但是单元素的枚举类型已经成为实现Singleton的最佳方法。
第4条:通过私有构造器强化不可实例化的能力
第5条:避免创建不必要的对象
静态初始化块初始化常量,可以用延迟初始化优化
要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱
第6条:消除过期的对象引用
栈内存泄露:只要类时自己管理内存,程序员就应该警惕内存泄露问题
缓存内存泄露:当所要的缓存项的生命周期是又该键的外部对象引用而不是值决定时,可以使用WeakHashMap来缓存。
监听器和回调:如果你实现了一个API,客户端在这个API中注册回调,却没有显示地取消注册,那么除非你采取某些动作,否则它们就会积聚。最佳方法是使用弱引用。
第7条:避免使用终结方法
除非是作为安全网,或者是为了终止非法关键的本地资源,否则请不要使用终结方法。在这些很少见的情况下,既然使用了终结方法,就要记住调用 super.finalize。如果用终结方法作为安全网,要记得记录终极方法的非法用法。最后,如果需要把终结方法与公有的非final类关联起来,可以考虑使用终结方法守卫者,以确保即使子类的终结方法未能调用super.finalize,该终结方法也会被执行。
转载请注明出处:http://lt200819.iteye.com/blog/1707699
分享到:
相关推荐
Java, Java, Java, Object-Oriented Problem Solving (3rd Edition) 3rd Edition by Ralph Morelli (Author), Ralph Walde (Author) 856 pages (June 25, 2017) 出版社: Prentice Hall; 3 edition Language: ...
Java J2me Walter game open source
Walter Oney - Programming the Microsoft Windows Driver Model 1st booklang: eng
Rudin的经典教材之一,比较难,建议有一定泛函分析基础时再来看 (其实这更像一本工具书,而不是入门教材)
Functional.analysis Walter.Rudin的泛函分析,):
c++面向对象程序设计(第6版)Walter Savitch 著 佟俐鹃 改编版。清华大学出版社 书上的test bank自测题 原题及答案word版
本人亲自整理的 word版本C++面向对象程序设计(第五版)walter Savitch著(清华大学出版社)
第6版 C++面向对象程序设计(美)Walter Savitch著,周靖译这本书的课后编程项目的答案
第2章 控制台输入和输出 引言 前导知识 2.1 屏幕输出 2.2 使用scanner类的控制台输入 小结 自测题参考答案 编程项目 第3章 控制流 引言 . 前导知识 3.1 分支结构 ...
电和磁麻省理工-Walter Lewin课件中英文版,非常好的书
java通知系统设计_通知系统的数据库设计 我在这⾥读了⼏个关于这个论点的问题,但我找不到解决⽅案 . 系统必须向⽤户发送⼀个或多个通知,所以我的第⼀个想法是 Notification --------------------- id sender_id ...
C++ 面向对象程序设计 第六版 (Walter Savitch) 源代码 及第七版
这是一个java培训课程,谢谢!我自己记下的笔记,大家一起努力吧
《数据结构与面向对象程序设计(C++版)(第4版)》首先介绍了软件开发的各个阶段、C++面向对象程序设计思想,然后从软件开发的角度,利用面向对象设计的思想,系统阐述了指针和动态数组、链表、模板类、迭代器、栈、...
激光物理,固体激光器基础,固体激光工程,英文版资料
第2章 C++基础知识 第3章 更多的控制流程 第4章 过程抽象和返回值的函数 第5章 所有子任务的函数 第6章 I/O流:对象和类入门 第7章 数组 第8章 字符串和向量 第9章 指针和动态数组 第10章 定义类 第11章 类中的友元...
economics history
word版本C++面向对象程序设计(第五版)walter Savitch 本人亲自整理,经过多次格式转换,来之不易,分享给大家
C++面向对象程序设计(第6版)Walter Savitch著 周靖译 课后习题答案
word版本C++面向对象程序设计(第五版)walter Savitch 我是从他人的pdg格式转换的pdf又转换的word 来之不易请大家珍惜