Effective Java 读书笔记

时间:2023-03-09 14:23:23
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。