【Java避坑神作】Effective Java 第3版中英文版下载。
大约 5 分钟
转载请注明:
作者:TodoCoder
出处: https://www.todocoder.com/pdf/java/002003.html
大家好,我是Coder哥,今天我们来推荐一本书,《Effective Java》。文末附下载地址第3版中英文版的都有
《Effective Java》是 Java 领域的经典之作,其影响力不亚于《Think in Java》。它是每个 Java 开发者的必读书籍,值得多次阅读品味,并不断实践其中的经验技巧。
如果你使用刚刚学会的Java做了一个小应用程序,那么你就可以开始有选择地看这本书。书中分别对Java的不同特性分章节给予作者本人的建议。如果你还没有用到其中的某一特性,那么就没必要读相关的章节,跳过去。只有你经历过了,摔倒过了,困扰过了,你才会与书中的建议产生共鸣。每做完一个工程后或者编码期间,就可以多次重读,加深自己的理解,并了解新的建议。
目录
- 考虑使用静态工厂方法替代构造方法
- 当构造方法参数过多时使用builder模式
- 使用私有构造方法或枚类实现Singleton属性
- 使用私有构造方法执行非实例化
- 使用依赖注入取代硬连接资源(hardwiring resources)
- 避免创建不必要的对象
- 消除过期的对象引用
- 避免使用Finalizer和Cleaner机制
- 使用try-with-resources语句替代try-finally语句
- 重写equals方法时遵守通用约定
- 重写equals方法时同时也要重写hashcode方法
- 始终重写 toString 方法
- 谨慎地重写 clone 方法
- 考虑实现Comparable接口
- 使类和成员的可访问性最小化
- 在公共类中使用访问方法而不是公共属性
- 最小化可变性
- 组合优于继承
- 如使用继承则设计,应当文档说明,否则不该使用
- 接口优于抽象类
- 为后代设计接口
- 接口仅用来定义类型
- 优先使用类层次而不是标签类
- 优先考虑静态成员类
- 将源文件限制为单个顶级类
- 不要使用原始类型
- 消除非检查警告
- 列表优于数组
- 优先考虑泛型
- 优先使用泛型方法
- 使用限定通配符来增加API的灵活性
- 合理地结合泛型和可变参数
- 优先考虑类型安全的异构容器
- 使用枚举类型替代整型常量
- 使用实例属性替代序数
- 使用EnumSet替代位属性
- 使用EnumMap替代序数索引
- 使用接口模拟可扩展的枚举
- 注解优于命名模式
- 始终使用Override注解
- 使用标记接口定义类型
- lambda表达式优于匿名类
- 方法引用优于lambda表达式
- 优先使用标准的函数式接口
- 明智审慎地使用Stream
- 优先考虑流中无副作用的函数
- 优先使用Collection而不是Stream来作为方法的返回类型
- 谨慎使用流并行
- 检查参数有效性
- 必要时进行防御性拷贝
- 仔细设计方法签名
- 明智审慎地使用重载
- 明智审慎地使用可变参数
- 返回空的数组或集合,不要返回 null
- 明智审慎地返回 Optional
- 为所有已公开的 API 元素编写文档注释
- 最小化局部变量的作用域
- for-each 循环优于传统 for 循环
- 了解并使用库
- 若需要精确答案就应避免使用 float 和 double 类型
- 基本数据类型优于包装类
- 当使用其他类型更合适时应避免使用字符串
- 当心字符串连接引起的性能问题
- 通过接口引用对象
- 接口优于反射
- 明智审慎地本地方法
- 明智审慎地进行优化
- 遵守被广泛认可的命名约定
- 只针对异常的情况下才使用异常
- 对可恢复的情况使用受检异常,对编程错误使用运行时异常
- 避免不必要的使用受检异常
- 优先使用标准的异常
- 抛出与抽象对应的异常
- 每个方法抛出的异常都需要创建文档
- 在细节消息中包含失败一捕获信息
- 保持失败原子性
- 不要忽略异常
- 同步访问共享的可变数据
- 避免过度同步
- executor 、task 和 stream 优先于线程
- 相比 wait 和 notify 优先使用并发工具
- 文档应包含线程安全属性
- 明智审慎的使用延迟初始化
- 不要依赖线程调度器
- 优先选择 Java 序列化的替代方案
- 非常谨慎地实现 Serializable
- 考虑使用自定义的序列化形式
- 保护性的编写 readObject 方法
- 对于实例控制,枚举类型优于 readResolve
- 考虑用序列化代理代替序列化实例
【 Effective Java 第3版 中英文版 百度网盘地址 提取码: pbu6】