书到用时方恨少,事非经过不知难

陆游

自从5月初转行做JAVA开发后,也还是买了一批书,其中就有这本『Effective Java』,但是很惭愧一直没有好好看

10月底去了H项目组,开始了9-10-6工作制,一方面大量写代码,但自己写出来的代码明明白白、清清楚楚知道不优雅、有坑,深感急需看书充电,提升代码质量;另一方面,工作紧迫,看书的事一拖再拖,终于在2015年元旦小长假才了结,一口气读完『Effective Java』

一些有启发的内容(纲要、关键词、关键句)记录如下

第2章 创建和销毁对象

第1条 使用静态工厂方法代替构造器

第2条 遇到有多个构造器参数时使用构建器(Builder)

Builder模式,链式调用,易于阅读

大多数参数都是可选的时候,更适合Builder模式

第4章 类和接口

第13条 使类和成员的可访问性最小化

第15条 使可变性最小化

第16条 复合优先于继承

复合(composition)

包装类(wrapper class)

Decorator模式

『is-a』关系才真正应该使用『继承』,如果只是『has-a』关系,就不适合使用『继承』

『继承』违背了『封装性』原则

第18条 接口优先于抽象类

mixin

对重要的接口提供『skeletal implementation』(『AbstractInterface』)

接口的设计必须十分慎重:接口一旦被公开发行,并被广泛实现,想要再做修改,几乎是不可能的

第7章 方法

第38条 检查参数的有效性

在方法体的开头处,通过显示的检查来判别参数的有效性

第39条 必要时进行保护性拷贝

每当编写方法、构造函数时,如果传入外部对象,那么必须考虑此对象的可变性

第40条 谨慎设计函数signature

避免过长的参数列表,不多于4个参数

创建静态成员类作为辅助类,用于保存传入的大量参数

也可以使用Builder模式

第43条 返回零长度的数组(集合),而不是null

第8章 通用程序设计

第45条 局部变量作用域最小化

在首次使用的地方申明局部变量

使函数尽可能短小,同样可以控制局部变量的作用域

第48条 如果须要精确数据,避免使用float及double

使用BigDecimal,尤其是『货币』相关场景

第49条 基本类型优先于装箱基本类型

基本类型(int)与装箱基本类型(Integer)比较时,会自动拆箱,如果遇到null,就会NPE

第54条 谨慎使用本地方法

JNI(Java Native Interface)

native method

第55条 谨慎地进行优化

努力编写『好的』程序而不是『快的』程序

努力避免限制性能的设计决策

当一个系统设计完成之后,最难以更改的组件是那些指定了模块之间交互关系以及模块与外界交互关系的组件(其实就是广义的接口),这其中最主要的就是API、线路层(wire-level)、数据格式(表结构)

第9章 异常

第58条 对于可恢复的情况使用受检异常,对编程错误使用运行时异常

第10章 并发

参见另外一篇博文:http://chenkan.me/2014/07/13/java_synchronized/

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注