Effective Java 读书笔记:对象创建与优化策略

需积分: 15 9 下载量 75 浏览量 更新于2024-07-22 收藏 92KB DOCX 举报
"Effective Java读书笔记" Effective Java是Java编程领域的一本经典书籍,由Joshua Bloch撰写,主要探讨了编写高质量Java代码的最佳实践。以下是对书中几个关键知识点的详细解析: 1. 考虑使用静态工厂方法替代构造子 静态工厂方法提供了比构造子更多的灵活性,比如它们可以有命名、不需要每次都创建新对象、返回对象的任何子类以及减少创建带参数对象的复杂度。然而,它们也有缺点,如不能被继承,且与其他静态方法区分度不高。 2. 当面对多个构造参数时,考虑使用Builder模式 Builder模式适用于处理大量构造参数的情况,通过分步骤设置参数,最后构建出对象。这样既保持了构造子的简洁,又简化了客户端代码。但过度使用可能导致代码过于冗长,一般适用于四个或更多参数的情况。 3. 使用私有构造子或者enum类型加强单例属性 单例模式确保一个类只实例化一次,私有构造子是基础。对于序列化,需要声明所有字段为transient并提供readResolve方法。使用enum单例则更为安全,因为它天然支持序列化且不允许多例。 4. 用私有构造子强制不可初始化性 对于只包含静态方法和字段的工具类,应避免实例化。通过添加私有构造子,可以确保类无法被初始化,通常还会配合抛出AssertionError来增强安全性。 5. 避免产生不必要的对象 创建对象是有成本的,特别是在频繁操作时。因此,应尽可能重用对象,比如使用静态成员或缓存已创建的对象。例如,对于不可变对象,可以使用 flyweight 模式或缓存来避免重复创建。 6. 使用枚举代替常量类 枚举不仅提供了一种安全、类型安全的方式来表示一组相关的值,而且比常量类更简洁、更易于使用。枚举可以有方法,也可以实现接口,这使得它们功能强大且灵活。 7. 优先考虑使用final final关键字用于确保变量不会被重新赋值,提高代码的可预测性和可维护性。特别是对于类和方法,final可以防止子类化和重写,有助于保持设计意图。 8. 尽可能使类和方法不可变 不可变对象在多线程环境下更安全,也更容易理解。创建不可变对象的关键是确保对象一旦被创建,其状态就不能改变。 9. 重写equals()时总要重写hashCode() 当重写equals()方法以进行对象比较时,必须同时重写hashCode()以确保一致性,这对于对象在哈希表中的正确行为至关重要。 10. 推迟初始化 对于不立即需要的属性,可以推迟初始化,直到真正需要时才进行,以提高程序性能。 以上只是Effective Java中部分重要知识点的简述,每一项都值得深入理解和实践,以提升代码质量。通过遵循这些最佳实践,开发者可以编写出更加高效、可维护的Java代码。