Effective Java 读书笔记
2016-04-08 10:26
267 查看
创建和销毁对象
》考虑用静态工厂方法替代构造器。
优点:
●优势在于有名称。
●不必再每次调用他们的时候都创建一个新的对象。
●可以返回原返回类型的任何子类型的对象。
●在创建参数化类型实例的时候,他们使代码更加简洁。
缺点:
●类如果不含公有的或者受保护的构造器。就不能被子类化。
●他们与其他的静态方法没有任何区别。
》遇到多个构造器参数的时候考虑用构建器。
》用私有的构造器或者枚举类型强化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。
》
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
》考虑用静态工厂方法替代构造器。
优点:
●优势在于有名称。
●不必再每次调用他们的时候都创建一个新的对象。
●可以返回原返回类型的任何子类型的对象。
●在创建参数化类型实例的时候,他们使代码更加简洁。
缺点:
●类如果不含公有的或者受保护的构造器。就不能被子类化。
●他们与其他的静态方法没有任何区别。
》遇到多个构造器参数的时候考虑用构建器。
》用私有的构造器或者枚举类型强化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。
》
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
相关文章推荐
- 剑指offer 23 二叉搜索树的后序遍历序列
- 'nodeName' 为空或不是对象的原因
- LeetCode *** 24. Swap Nodes in Pairs
- 结构-行为-样式-Bootstrap笔记
- jQuery学习笔记 —— 4. 动画
- ie8兼容css3的样式 如@media
- jQuery学习笔记 —— 2. DOM操作和 3. 事件绑定
- json 点滴
- 从此不求人:自主研发一套PHP前端开发框架(16)
- JS中函数参数的传递
- json
- 【剑指offer系列】 链表中倒数第k个节点___15
- html的文件控件<input type="file">样式的改变
- Html特殊字符大全
- CSS Sprite——雪碧图
- JS在页面Frame和子Frame之间的调用
- jquery 一些简单代码
- json2xlsx AND xlsx2json 接口
- js动态生成css代码
- JSP中四种传递参数中文乱码问题