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,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...
随机推荐
- 【转】百度站长平台MIP引入工具使用心得
MIP引入主动推送流程 对于 MIP 站点改造好了,我们如何提交数据,并且 MIP 提交后,我们能得到哪些数据的反馈,在这里简单的写一篇文章,说一下. 改造 MIP,我们一般是添加了一个二级域名站点进 ...
- 跳动在网页中间的精灵----Javascript
今天开始js的内容整理,跳动在网页里的精灵就是它了. 一.简介 1.什么是Javascript JavaScript 是一种具有面向对象能力的.解释型的程序设计语言.更具体一点,它是基于对象和事件驱动 ...
- 解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法
目录 解决vs2019中暂时无法为.net core WinForms使用 Designer 的临时方法 安装 vs 2019 professional/enterprise版本 在vs的设置里,勾选 ...
- 六大设计原则(三)DIP依赖倒置原则
依赖倒置原则DIP(Dependence Inversion Principle) 依赖倒置原则的含义 高层模块不能依赖低层模块,二者都应该依赖其抽象. 抽象不应该依赖于细节. 细节应该依赖抽象. 什 ...
- 学习web的第二天
之前因为技能大赛的原因,导致我这门课没有上.其实上学期是开Dreamweaver网页制作的课程的,所以老师讲的很快.我就利用课后时间去补漏,今天讲了HTML标签:1.标题标签<h1>~&l ...
- HTML 练习显示隐藏
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Odoo:全球第一免费开源ERP权威性能测试报告完整版(绝对珍藏)
Odoo平台简介 Odoo(以前叫OpenERP)是世界排名第一的开源ERP系统,最早由比利时一家公司开发,经过十几年发展,目前全世界Odoo的使用者超过2百万人,Odoo被翻译成几十种语言,Odoo ...
- 底部导航栏-----FragmentTabHost
[说明] 1.主界面上添加父容器:FragmentTabHost 属于v4兼容包 需要指定该id为android:id/tabhost,不能修改,表示由android系统来托管这个id. 本身是一个F ...
- github 进阶说明
目录 github 进阶说明 前言 三个目录树 重置 git reset 增加路径的reset 检出 checkout 带路径的checkout 仓库 数据对象 其他 资料 github 进阶说明 前 ...
- windows本地安全策略实验-远程桌面连接锁定账户
windows本地安全策略实验-远程桌面连接锁定账户 实验环境: 服务端:Win7-1:10.10.10.136,开启远程桌面服务 客户端:win7-2:10.10.10.153 确保客户端和服务端能 ...