Effective Java 读书笔记----第二章
第二章 创建和销毁对象
1.考虑用静态工厂方法代替构造器的优势(item 1)
1.1 静态工厂方法是有名称的,比构造器更加明确的描述这个方法返回的对象。更便于阅读。注,这里的静态工厂方法与设计模式的工厂方法不同。
1.2 不必在每次调用它们的时候都创建一个新对象
1.3 相比构造器,它们可以返回原返回类型的任何子类型的对象。这样我们在选择返回对象的类时就有了更大的灵活性。我的理解是类似于面向接口编程。Java Collections Framework的集合接口有32个使得实现,分别提供了不可修改的集合、同步集合等。几乎所有这些实现都通过静态工厂方法在一个不可实例化的类java.util.Collections中导出。(List l = new ArrayList();//推荐 ArrayList l = new ArrayList();//不推荐,如果用前者,后面的实现类可以改成new Vector(),而后者不可以)
2.遇到多个构造器参数时考虑用构建器(Builder模式)(item 2)
2.1 这一个item学到了一个Builder设计模式。也提出,在构造器的参数太多时,使用Builder模式。这样写会易读,灵活。
3.消除过期的引用。(item 6)
3.1 比如自己实现一个栈,在写pop方法时,应该在elements[--size]之后,还得对elements[size]消除,即指向空。不然有可能导致内存泄露。
3.2 这一个item也提到了通过弱引用来避免内存泄露。比如使用WeakHashMap等,但是目前看起来知识有限,还没能太好的理解。(TODO)
3.3 提到一个内存泄露查找工具,即Heap剖析工具(Heap Pofiler)(TODO)
4.避免使用终结方法(finalize方法)(item 7)(TODO)
4.1 目前看来就是能不用就不用。对于注重时间的操作,不能使用这个方法。
4.2 Java不仅不保证终结方法会被及时执行,而且根本不保证会被执行。
4.3 这一个item好多没看懂
注:TODO的意思是在看文章的当时没能理解文章,或者还没实际使用到该知识。以后有用应该再研究一下。