第1条:考虑用静态工厂方法代替构造器
优点:1:静态方法相对于构造器是有名称的;
当一个类需要多个相同签名的构造器时,可以使用静态方法代替构造器,
并且选择适当的名字。
2:不必再没次调用他们时都创建一个新对象。
如果程序总是创建相同的对象时,并且创建代价很高,则可以使用这项技术提高性能。
3:可以返回类型的任何子类型对象。
4:在创建参数化类型实例时 使代码更加简洁。
缺点:1:类如果不含有公有或者受保护的构造函数 就不能被子类实例化。
2:它与其他静态方法本质上没有区别。
getinstance
getnewinstance
第2条:
对象的创建有三种常见方式:
1:通过反射取得对象实例
2:通过clone方式创建新对象
3:通过构造器创建并初始化实例对象
构造器在创建多参数复杂对象实例时:
又有如下三种方式:
new方式参数列表:当参数过多时,冗长麻烦
Javabean:动态创建 当被创建完成后可能还没有实例化完全就被调用,线程不安全。
builder模式:内部类形式,先构造内部类在构造实例安全,可选参数多时用灵活方便,建议使用这种方式
第6条:消除过期的对象
java会自动帮你回收内存,但这并不代表不需要对内存进行管理。
如果一个栈先是增长然后收缩,那么从栈中弹出的对象不会被回收,因为栈的内部还存在对象的过期引用。这时栈中分为两部分,一部分是活动的 一部分是非活动的 应该清楚非活动的过期引用。
清空过期引用的另一个好处是 如果它们以后又被错误的引用 程序就会立刻报错。
清空对象应该是一种例外,而不应该是一种规范,消除过期对象最好的办法是让引用它的变量结束生命周期。
内存泄漏通常和变量的生命周期联系在一起
内存泄漏通常和集合联系在一起。
1:只要类事自己管理内存 程序员就应该注意内存泄漏问题。
2:内存泄漏另一个常见来源是缓存
3:内存泄漏常见来源的监听器和其他回调。
第7条:避免使用终结方法
finalizer通常是不可预测的,也是很危险的 一般情况下是不必要的,使用这个方法会导致行为不稳定,降低性能以及可以移植性问题。
如果用终结方法关闭已经打开的文件,这是严重错误的,因为打开文件的描述符是一种有限的资源,由于jvm会延迟执行终结方法,所以大量文件会保留打开状态,当一个程序不能再打开文件时,他可能会失败。
显示的终结方法通常与trycatch结构一起使用。