Effective Java 读书笔记

创建和销毁对象

》考虑用静态工厂方法替代构造器。

优点:

  ●优势在于有名称。

  ●不必再每次调用他们的时候都创建一个新的对象。

  ●可以返回原返回类型的任何子类型的对象。

  ●在创建参数化类型实例的时候,他们使代码更加简洁。

缺点:

  ●类如果不含公有的或者受保护的构造器。就不能被子类化。

  ●他们与其他的静态方法没有任何区别。

》遇到多个构造器参数的时候考虑用构建器。

》用私有的构造器或者枚举类型强化Singleton属性。

》通过私有构造器强化不可实例化的能力。

》避免创建不必要的对象

反面的例子

   String s = new String("s");// do not this

  ●每次执行的时候都会创建一个新的实例。

改版

  String s= "s";

  ●只有一个String实例。

》消除过期的对象引用。

  ●一旦对象引用已经过期,只需要清空这些引用即可。

  ●清空对象引用应该是一种例外,而不是一种规范的行为。

  ●只要是类自己管理内存,就应该警惕内存泄漏问题。

》避免使用终结方法

  ●终结方法(finalizer)是不可预测的,也是很危险的。一般的情况下是不必要的。

对所有对象都通用的方法

》覆盖equals时请遵守通用约定。

  ●类的每个实例本质上都是唯一的。

  ●不关心类是否提供了逻辑相等的测试功能。

  ●超类已经覆盖了Equals,从超类继承过来的行为对于子类也是合适的。

  ●类是私有的或是包私有的,可以确定他的equals方法永远不会被调用,这时,要覆盖,防止被意外的调用。

  ●自反性。

  ●对称性。

  ●传递性。

  ●一致性。

                                                                                                 类和接口

 

》使类与成员的可访问性最小化。

》在公有类中使用访问方法而非公有域。

》复合优先于继承。

》接口优于抽象类。

  ●现有的类可以很容易被更新,以实现新的接口。

》接口只用于定义类型。

  ●常量接口模式是对接口的不良使用。

》要尽可能的消除非受检警告。

》列表优先于数组。

  ●数组使具体化的,只有在运行的时候才知道并检查谈们的元素约束类型。

》优先考虑泛型

》38:检查参数的有效性

》39:必要时进行保护性拷贝。

》40:谨慎设计方法签名。

  ● 谨慎的选择方法的名字。

  ● 不要过于追求过于简便的方法。

  ● 避免过长的参数列表(4个或更少)

       减少参数的方法:

       分解成多个方法

        创建辅助类

        采用builder模式。

  ● 对于参数类型,要优先使用接口而不是类。

》41:慎用重载

》42:慎用可变参数

》43:返回0长度的数组或者集合,而不是返回null。

》44:为所有导出的API元素编写文档注释。

                                                                           第八章 通用程序设计

》将局部变量的作用域最小化。

  ● 最有利的方法就是在第一次使用它的地方声明。

》for-each优先于for循环

》了解和使用类库

》如果需要精确的答案,避免使用double与float。

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

  ●

posted @ 2016-04-08 10:26  戎码一生  阅读(197)  评论(0编辑  收藏  举报