Effective Java目录
创建和销毁对象
- 考虑用静态工厂方法代替构造器
- 遇到多个构造器参数时要考虑用构建器
- 用私有构造器或者枚举类型强化Singleton属性
- 通过私有构造器强化不可实例化能力
- 避免创建不必要的对象
- 消除过期的对象引用
- 避免使用终结方法finalizer
对于所有对象都通用的方法
- 覆盖equals时请遵守通用约定
- 覆盖equals时总要覆盖hashCode
- 始终要覆盖toString
- 谨慎地覆盖clone
- 考虑实现Comparable接口
类和接口
- 使类和成员的可访问性最小化
- 在公有类中使用访问方法而非公有域
- 使可变性最小化
- 符合优先于继承
- 要么为继承而设计,并提供文档说明,要么禁止继承
- 接口优于抽象类
- 接口只用于定义类型
- 类层次优于标签类
- 用函数对象表示策略
- 优先考虑静态成员类
泛型
- 请不要在新代码中使用原生态类型(Object、Collection等等,一般使用泛型代替)
- 消除非受检警告
- 列表优于数组
- 优先考虑泛型
- 优先考虑泛型方法
- 利用有限制通配符来提升API的灵活性
- 优先考虑类型安全的易购容器
枚举和注解
- 用enum代替int常量
- 用实例域代替序数
- 用EnumSet代替位域
- 用EnumMap代替序数索引
- 用接口模拟可伸缩的枚举
- 注解优先于命名模式
- 坚持使用Override注解
- 用标记接口定义类型
方法
- 检查参数的有效性
- 必要时进行保护性拷贝
- 谨慎设计方法签名
- 慎用重载
- 慎用可变参数
- 返回零长度的数组或者集合,而不是null
- 为所有导出的API编写文档注释
通用程序设计
- 将局部变量的作用域最小化
- for-each循环优先于传统的for循环(如果有remove不用for-each)
- 了解和使用类库
- 如果需要精确的答案,请避免使用float和double
- 基本类型优先于装箱基本类型
- 如果其他类型更合适,则尽量避免使用字符串
- 当心字符串链接的性能
- 通过接口引用对象
- 接口优先于反射机制
- 谨慎地使用本地方法
- 谨慎地进行优化
- 遵守普遍接受的命名惯例
异常
- 只针对异常的情况才使用异常
- 对可恢复的情况使用受检异常,对编程错误使用运行时异常
- 避免不必要地使用受检异常
- 优先使用标准的异常
- 抛出与抽象相应的异常
- 每个方法抛出的异常都要有文档
- 在细节消息中包含能补货失败的信息
- 努力使失败保持原子性
- 不要忽略异常
并发
- 同步访问共享的可变数据
- 避免过度同步
- executor和task优先于线程
- 并发工具优先于wait和notify
- 线程安全性的文档化
- 慎用延迟初始化
- 不要依赖于线程调度器
- 避免使用线程组
序列化
- 谨慎地实现Serializable接口
- 考虑使用自定义的序列化形式
- 保护性地编写readObject方法
- 对于实例控制,枚举类型优先于readResolve
- 考虑用序列化代理序列化实例
Effective Java目录的更多相关文章
- Effective Java 目录
<Effective Java>目录摘抄. 我知道这看起来很糟糕.当下,自己缺少实际操作,只能暂时摘抄下目录.随着,实践的增多,慢慢填充更多的示例. Chapter 2 Creating ...
- Effective Java 第三版笔记(目录)
<Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时 ...
- effective java —— 终结方法守卫者
目录: effective java —— 终结方法守卫者 effective java 第2章:创建和销毁对象.第7条 : 避免使用终结方法.最后的“终结方法守卫者 (finalizer guard ...
- 《Effective Java(中文第二版)》【PDF】下载
<Effective Java(中文第二版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382186 Java(中文第二版)& ...
- Effective Java - 构造器私有、枚举和单例
目录 饿汉式单例 静态常量 静态代码块 懒汉式单例 尝试加锁 同步代码块 双重检查 静态内部类单例 枚举单例 Singleton 是指仅仅被实例化一次的类.Singleton代表了无状态的对象像是方法 ...
- Java 高效编程(Effective Java)中文第三版(补档)
来源:sjsdfg/effective-java-3rd-chinese <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过, ...
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- 《Effective Java》学习笔记——积累和激励
从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...
随机推荐
- Vue 进阶之路(六)
上篇文章我们分析了一下 vue 中的条件渲染,本篇我们说一下 vue 中的列表渲染和 set 方法. <!DOCTYPE html> <html lang="en" ...
- "元素隐式具有 “any” 类型,因为类型“Shared”没有索引签名"问题解决思路
最近在构建一个typescript项目时如下代码在项目框架里vscode报错元素隐式具有 "any" 类型,因为类型“Shared”没有索引签名;很有意思的是当我们单独的把这段代码 ...
- 『片段』Win32 模式窗体 消息路由
需求背景 近来,有个需求: 和一个外部程序对接. 具体是,我这边 主程序用 Process 启动外部程序.外部程序启动后,我这边调用的窗体不允许再进行任何操作. 当外部程序关闭时,外部程序会向我这边的 ...
- 工厂模式讲解, 引入Spring IOC
目录 引入 简单工厂 抽象工厂 Spring的bean工厂 模拟Spring工厂实现 模拟IOC 引入 假设有一个司机, 需要到某个城市, 于是我们给他一辆汽车 public class Demo { ...
- pins-模块内的代码及资源隔离方案
随着项目的不断迭代,复杂的业务模块及项目自身的基础技术组件迅速扩张,以往基于单个模块的项目往往显得过于臃肿.代码目录结构,包名混乱,代码模块职责不清晰,耦合度高,不便维护.基础公共组件没有抽取并剥离干 ...
- 邀您参加 | BigData & Alluxio 交流会-成都站
4月27日,在天府之国,与你共享大数据与Alluxio的技术魅力. 活动介绍 本期技术沙龙将会聚焦在大数据.存储.数据库以及Alluxio应用实践等领域,邀请腾讯技术专家和业界技术专家现场分享关于Al ...
- 一般处理程序,将nvarchar值转换成数据类型int时失败
系统:WIndows 10 工具:Visual Studio 2017 在写代码的过程中,我遇到了这样的一个问题.如图 vs错误提示是在SqlHelper中有错,可是怎么改都不能解决问题. 最后发现是 ...
- Java设置PPT幻灯片背景——纯色、渐变、图片背景
PPT幻灯片生成时,系统默认是无色背景填充,幻灯片设计需要手动设置背景效果,可设置颜色填充或者图片背景填充.本文将对此介绍具体实现方法. 使用工具:Free Spire.Presentation fo ...
- 设计模式 | 外观模式/门面模式(facade)
定义: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 结构:(书中图,侵删) 一个简洁易用的外观类 一个复杂的子系统 实例: 书中提到了理 ...
- A项目轶事之加入项目2个月
A项目轶事之加入项目2个月 4月18号是我入A项目整整2个月的日子. 加入项目第一天,就发现A项目是一个大规模的SAP ERP项目. SAP各大模块,Salesforce, MES等各个系统相关的顾问 ...