第2章
第一条:考虑用静态工厂方法代替构造函数
好处一:静态工厂方法具有名字,可以很好的描叙返回对象,设置属性。
好处二:每次被调用,不要求非得创建一个新的对象。
好处三:与构造函数不同,可以返回一个原类型的子类型的对象。
第二条:使用私有构造函数来强化singleton属性
方法一:永远为一个singleton,性能稍微领先
public static final SingletonMethod s= new SingletonMethod();
private SingletonMethod()
{
}
方法二:稍微灵活
private static final SingletonMethod s= new SingletonMethod();
private SingletonMethod()
{
}
public static SingletonMethod getInstance()
{
return s;
}
为了使一个singleton类变成可序列化的,在声明中加上”implements Serilizable”外,也要提供一个readResolve方法
Private Object readResolve() throws ObjectStreamException
{
return s;
}
第三条:通过私有构造函数强化不可实例化的能力
第四条:避免创建重复的对象
第五条:消除过期的对象引用
第六条:避免使用终结函数
第3章
7-11
第4章
第十二条:使类和成员的可访问能力最小化
第十三条:支持非可变性
第十四条:复合优先于继承
第十五条:要么专门为继承而设计,并给出文档说明,要么禁止继承
第十六条:接口优先于抽象类
可以考虑将接口和抽象类的优点结合起来,对于你期望导出的每一个重要接口,都提供一个抽象的骨架实现。
第十七条:接口只是被用于定义类型
常量接口模式是对接口的不良使用
第十八条:优先考虑静态成员类
第6章 方法
第23条:检查参数的有效性
第24条:需要时使用保护性拷贝
第25条:谨慎设计方法的原型
第26条:谨慎的使用重载
第27条:返回零长度的数组而不是Null
第28条: 为所有导出的API元素编写文档注释
第7章 通用程序设计
第29条:将局部变量的作用域最小化
第30条:了解和使用库
第31条:如果要求精确的答案,请避免使用float和double
第32条:如果其他类型更适合,则避免使用字符串
第33条:了解字符串连接的性能
第34条:通过接口引用对象
第35条:接口优先于映像机制
第36条:谨慎的使用本地方法
第37条:谨慎的进行优化
第38条:遵守普遍接受的命名惯例
第8章
第39条:只针对不正常的条件才使用异常
第40条:对于可恢复的条件使用被检查的异常,对于程序错误使用运行时异常
第41条:避免不必要的使用被检查的异常
第42条:尽量使用标准的异常
第43条:抛出的异常要适合于相应得抽象
第44条:每个方法抛出的异常都要有文档
第45条:在细节消息中包含失败—捕获信息
第46条:努力使失败保持原子性
第47条:不要忽略异常
第9章 线程
第48条:对共享可变数据的同步访问
Synchronized关键字可以保证在同一时刻,只有一个线程在执行同一条语句,或者同一个代码块。
同步不仅可以阻止一个线程看到对象看到处于不一致的状态中,它还可以保证通过一系列看似顺序执行的状态转变序列,对象从一种一致的状态变迁到另一种一致的状态。
为了在线程之间可靠的通信,以及为了互斥访问,同步是需要的。
Volatile修饰符可以保证一个线程在读取一个域的时候都将会看到最近刚刚被写入的值。
第49条:避免使用过多的同步
在一个被同步的区域内部,不要调用一个可被改写的公有或受保护的方法
通常,在同步区域内你应该做尽可能少的工作
如果一个类或者一个静态方法依赖于一个可变的静态域,那么它必须在内部进行同步,即使它往往只用于单个线程。
第50条:永远不要在循环的外面调用wait
在等待之前测试条件,如果条件成立的话则跳过等待,这对于确保活性是必要的。
在等待之后测试条件,如果条件不成立的话继续等待,这对于确保安全性是必要的。
总是在一个while循环中调用wait,并且使用标准的模式。一般情况下,你应该使用notifyAll优先于notify。
第51条:不要依赖于线程调度器
不要依赖Thread.yield或者线程优先级。
第52条:线程安全性的文档化
第53条:避免使用线程组
第10章 序列化
序列化技术为远程通信提供了标准的线路层对象表示,也为javaBean组件结构提供了标准的永久数据格式。
第54条:谨慎的实现Serializable
提供一个可访问的无参数构造函数,该设计方案允许(但不要求)子类实现Serializable。
第55条:考虑使用自定义的序列化形式
transient Java语言的关键字,用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。
第56条:保护性的编写readObject方法
当一个对象被反序列化的时候,对于客户不应该拥有的对象引用,如果哪个域包含了这样的对象引用,则必须要做保护性拷贝,这是非常重要的。
对于每一个可序列化的非可变类,如果它包含了私有的可变组件,那么在它的readObject方法中,必须要对这些组件进行保护性拷贝。
对于非final的可序列化的雷,在readObject方法和构造函数之间还有类似的地方,readObject方法不可以调用可被改写的方法,无论是直接调用还是间接调用都不可以。
第57条:必要时提供一个readResolve方法
readResolve方法不仅仅对于singleton对象是必要的,而且对于所有其他的实例受控的类也是必需的。
分享到:
相关推荐
《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,该书的第三版继续提供了关于如何编写高效、优雅、可维护的Java代码的指导。以下是基于给出的目录和部分内容提取的一些关键知识点: ### 第一...
总的来说,《Effective Enterprise Java》中文版是一本值得每一个Java开发者阅读的书籍,它不仅提供了丰富的编程技巧,还强调了代码的可读性和可维护性,对于提升个人技能和团队开发效率都有极大的帮助。通过深入...
标题《effective-java.pdf》表明本文档是关于Java编程语言的实践指南,而描述说明了这是一份根据网上资源翻译后的HTML版本,经过转换形成的PDF文件,其内容可供参考。标签“java”指明文档内容与Java编程语言紧密...
这里我们将围绕"Effective-Java:Effective Java中文版第二版示例代码"这一主题,深入探讨书中的核心知识点。 1. **单例模式**:书中提倡使用`enum`实现单例,避免传统双重检查锁定(Double-Checked Locking)和静态...
读书笔记:Effective Java中文版第3版笔记
读书笔记:Effective Java中文版 第2版
读书笔记:Effective Java中文版学习项目
读书笔记:Effective Java 中文版(2版和3版)
读书笔记:Effective Java中文版第二版示例代码
读书笔记:Effective Java中文版第二版示例、笔记
读书笔记:读Effective Java中文版第3版阅读源码测试案列
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
读书笔记:Effective Java 中文版(第2版)总结 (美)Joshua Bloch 著
《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,现在已经更新到第三版。这本书深入探讨了如何编写高效、可维护且设计良好的Java代码,是每一个Java开发者提升技能的重要参考资料。以下是对该...
《Effective Java》是一本经典Java编程指南,作者是Joshua Bloch,这本书深入探讨了如何编写高质量、高效、可维护的Java代码。以下是对压缩包中各章节主要知识点的详细阐述: 1. **第2章 创建和销毁对象** - 单例...
《Effective Enterprise Java》是一本由James Gosling、Bill Venners和Cay S. Horstmann合著的经典著作,旨在帮助Java开发者深入理解和利用企业级Java技术。这本书提供了78条具体的建议,涵盖了从设计模式到并发编程...
在编程领域,特别是Java开发中,"Effective Java"是一本非常经典的书籍,由Joshua Bloch撰写,书中提出了一系列最佳实践和设计原则,以帮助开发者编写出更高效、更安全的代码。根据提供的标题和描述,我们将探讨三个...
"Effective Java 读书分享" 《Effective Java》读书分享.pptx 是一本 Java 编程语言指南,旨在帮助开发者编写高质量、可维护的 Java 代码。该书包含 90 个条目,每个条目讨论一条规则,涵盖了 Java 编程语言的...