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