为什么看这本书?


Java 四大名著之一,Java 之父 James Gosling 推荐的书。说来惭愧,搞 Java 6 年半都没有看过这本书。


前两天研究 Builder 模式解决构造函数参数过多的问题,被一位大佬推荐看一下这本书,于是从网盘里 down 下了这本电子书。



书的整体情况


300 页,在计算机类书籍里,算比较薄的。但里面的内容都是一个个经典案例,配了 bad code 与问题的修正。读完本书,大概花了 4-5 个小时。


书提到了这些知识模块:

  • 创建和销毁对象

  • 对象的通用方法

  • 类和接口

  • 泛型

  • 枚举与注解

  • 方法

  • 通用程序设计

  • 异常

  • 并发

  • 序列化

各模块里的案例比较零散,但都是精华,能够看出都是作者结合多年编程经验输出的真知灼见。



适合阅读人群


这本书不适合初级入门的朋友看,我在早期翻过这本书和《Java编程思想》,基本看不懂,吸收不了书里的精华。感觉就像一位高人在指点你,可你只能傻眼看着他,无法体会他话语中的精髓。


有一定开发经验的 Java coder,看了应该会有所收获。



最大的感触


再读本书,觉得这次看懂、吸收了不少精华内容:

  • 使用 Builder 模式解决构造方法参数太多的情况。

  • 写了一定时间的代码,就会思考性能问题,没有必要的对象可以不创建,比如使用享元模式缓存经常使用的不可变对象。

  • 覆盖 Object 类的 equals、hashCode、clone 方法,需要注意很多约束条件。如覆盖 equals 方法总要覆盖 hashCode 方法,否则该对象作为集合类的元素时会出现意想不到的情况,因为有些集合在判断元素是否存在方法内调用了 equals 和 hashCode 方法。

  • 抽象类一般用来表示 is-a 的关系,接口用了表示 has-a 的关系。接口可以用来表示实现类具有某类能力,可以用来进行标注,也可以用来构造组合关系。接口一般优于抽象类。

  • JDK 集合工具包中,泛型的使用是最多的。书中提到了 ?、T、E、?extends、?super,这些表示泛型的通配符,开发中经常遇到。泛型的递归,解惑了我对泛型中嵌套泛型情况的一些疑惑。数组泛型与集合泛型,是存在差异的,如 ArrayList 的泛型就是基于 Object[] 数组存储元素,通过 @SuppressWarnings("unchecked") 注解进行的类型转换,有兴趣可以看下 ArrayList 源码的 get 方法。

  • 枚举也有一些很巧妙的使用方法,比如给枚举添加成员属性,添加构造方法和抽象方法、实现接口,都会给开发带了很多便捷。

  • 异常不要用来处理正常逻辑,异常的处理对性能的消耗较大。比如用抛出异常的方式来停止循环,外层加一个 try-catch 语句,catch 里啥也不做。

  • 并发的最佳实践,没啥说的,去看《Java Concurrency in Practice》。

  • 序列化可以通过造假字节码,在反序列化之后,篡改了原 Java 对象,造成了安全问题。


更多相关文章

  1. 构造方法的参数太多,如何解决?
  2. 面试官:为什么静态方法不能调用非静态方法和变量?
  3. ConcurrentHashMap之size()方法
  4. 为什么不推荐使用finalize方法,来看看对垃圾回收有什么影响吧

随机推荐

  1. 同伴压力,大学生一定摆脱这种思维
  2. 别再问我Python怎么操作Word了!
  3. 最近的状况,顺便聊聊互联网的噪音。
  4. 工作之后,如何构建知识体系?
  5. 来自Kaggle金牌得主的Python数据挖掘框架
  6. 大学中,最让我受益的一本书。
  7. 看完这篇Python操作PPT总结,从此使用Pytho
  8. 太赞了!对标阿里‘60w’年薪Android开发笔
  9. 工作之后,越来越不想上班了。
  10. 熵!!!