
Effective Java 2 读书笔记
文章平均质量分 51
zhang-ml
这个作者很懒,什么都没留下…
展开
-
第三章 对于所有对象都通用的方法
8. 实现高质量equals方法的诀窍 使用==操作符检查“参数是否为这个对象的引用”,如果是,返回true; 使用instanceof操作符检查“参数是否为正确类型”,所谓正确类型,是指equals所在的类,有些情况下是指该类实现的某个接口; 把参数转换成正确类型,因为转换之前进行过instanceof的测试,所以会确保成功; 对于该类中的每个“关键”域,检查参数中的域是否与该对象对应的域相...原创 2018-08-06 23:29:06 · 192 阅读 · 0 评论 -
第四章 类和接口
13. 使类和成员的可访性最小化 封装:降低耦合,提高重用性 实例域决不能是公有的 公有类不应该包含公有域(除非公有静态final域),要确保公有静态final域所引用的对象都是不可变的 14. 在公有类中使用访问方法而非公有域 15. 使可变性最小化 使类成为不可变,需要遵循下面五条规则: 不要提供任何会修改对象状态的方法 保证类不会被扩展,一般让类成为final...原创 2018-08-06 23:33:34 · 232 阅读 · 0 评论 -
第五章 泛型
23. 不要使用原生态类型,要使用泛型 24. 消除非受检警告 @SuperWarnings(“unchecked”)要尽可能小的范围 25. 列表优于数组 26. 优先考虑泛型 27. 优先考虑泛型方法 28. 利用有限制通配符来提升api的灵活性 29. 优先考虑类型安全的异构容器...原创 2018-08-06 23:34:25 · 146 阅读 · 0 评论 -
第六章 枚举和注解
30. 用enum代替int常量 31. 用实例域代替序数 32. 用EnumSet代替位域 EnumSet是线程不安全的,需要借助Collections.synchronizedSet Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class)); 33. 用EnumMap...原创 2018-08-06 23:35:26 · 139 阅读 · 0 评论 -
第七章 方法
38. 检查参数的有效性 39. 必要时进行保护性拷贝 保护性拷贝实在参数有效性检查(38)之前进行的,而且有效性检查是针对拷贝之后的对象,这样做可以避免从检查参数到拷贝对象之间的时间段内从另一个线程改变类的参数 40. 谨慎设计方法签名 谨慎选择方法的名称:遵守命名规范、易于理解 不要过于追求提供便利的方法:方法职责清晰、小方法 避免过长的参数列表:<=4 方法拆分...原创 2018-08-06 23:36:36 · 137 阅读 · 0 评论 -
第八章 通用程序设计
45. 将局部变量的作用域最小化 要使局部变量作用域最小化的最有力的方法就只在第一次使用它的地方声明 另一个有效方法是使方法小而集中 46. for-each循环优于传统的for循环 有三种常见的情况无法使用for-each 过滤——如果需要遍历集合,并删除指定的元素,就需要使用显示的迭代器,以便可以调用它的remove方法 转换——如果需要遍历列表或数组,并取代它部分或...原创 2018-08-06 23:38:01 · 135 阅读 · 0 评论 -
第九章 异常
第九章 异常 57. 只针对异常的情况才使用异常 58. 对可恢复的情况使用受检异常,对编程错误使用运行时异常 59. 避免不必要的使用受检的异常 60. 优先使用标准的异常 最好重用现有的异常 61. 抛出与抽象对应的异常 62. 每个方法抛出的异常都要有文档 63. 在细节消息中包含能捕获失败的信息 为了捕获失败,异常的细节信息应该包含所有“...原创 2018-08-06 23:40:04 · 151 阅读 · 0 评论 -
第十章 并发
66. 同步访问共享的可变数据 不要使用Thread.stop。要阻止一个线程妨碍另一个线程,建议做法是让第一个线程轮询一个boolean域,这个域一开始为false,但是可以通过第二个线程设置为true,以表示第一个线程将终止自己。由于boolean域的读写是原子的,所以在访问这个域的时候不在需要同步 67. 避免过度同步 过度同步可能导致性能降低、死锁,甚至不确定的行为 应该在...原创 2018-08-06 23:43:59 · 157 阅读 · 0 评论 -
第十一章 序列化
74. 谨慎的实现serializable接口 实现serializable的代价 最大的代价:一旦一个类被发布,就大大降低了“改变这个类的实现”的灵活性 增加了出现bug和安全漏洞的可能性,反序列化是一个隐藏的构造器,依靠默认的反序列化机制,很容易是对象的约束关系遭到破坏,以及遭到非法访问 随着类发行新的版本,相关的测试负担也增加了。一个可序列化的类被修改时,要检查是否可以“在新版本中序列...原创 2018-08-06 23:50:06 · 144 阅读 · 0 评论