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,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...
随机推荐
- 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第6章 STM32H7工程模板建立(IAR8) 本章 ...
- ES 12 - 配置使用Elasticsearch的动态映射 (dynamic mapping)
目录 1 动态映射(dynamic mapping) 1.1 什么是动态映射 1.2 体验动态映射 1.3 搜索结果不一致的原因分析 2 开启dynamic mapping策略 2.1 约束策略 2. ...
- 《k8s-1.13版本源码分析》-调度优选
源码分析系列文章已经开源到github,地址如下: github:https://github.com/farmer-hutao/k8s-source-code-analysis gitbook:ht ...
- 用markdown + html写一封简历
0. 前言 1. 阶段1 - 确定需要几个模块 2. 阶段2 - 使用纯文字填充简历 3. 阶段3 - 预留空格 4. 阶段4 - 文章垂直方向的调整 5. 阶段5 - 居中对齐 6. 阶段6 - 加 ...
- .Net Project 常规结构
目录:一个.NET网站的成长历程 在个人的日常工作和学习中,接触到不少的项目,这些项目结构大同小异,其结构的核心思想无外乎“分层“. 分层?从字面上理解,看似简单,实则不然.这需要从多个维度去看待这个 ...
- 抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式概述 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 抽象工厂抽象工厂,顾名思义,就是比工厂模式更抽象的工厂模式.在工厂模式中,一个具体工厂只负责生产一个具体产品 ...
- 004. 前端跨域资源请求: JSONP/CORS/反向代理
1.什么是跨域资源请求? https://www.cnblogs.com/niuli1987/p/10252214.html 同源: 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有 ...
- RFI to RCE challenge
http://www.zixem.altervista.org/RCE/level1.php 构造payload: https://zixem.altervista.org/RCE/level1.ph ...
- SAP MM Storage Location Missing in MD04 Result?
SAP MM Storage Location Missing in MD04 Result? Today I received a ticket from business team, a user ...
- python全栈目录
Python Python开发[第一篇]:初识 Python开发[第二篇]:基本数据类型 Python开发[第三篇]:函数 Python开发[第四篇]:杂货铺 Python开发[第五篇]:模块 Pyt ...