# Effective Java
# 参考文档
# 简介
全书除第一章引言外,一共 90 条内容,简单分为十一个章节。
# 创建和销毁对象
该章节有以下几条:
- 用静态工厂方法代替构造器
- 遇到多个构造器参数时要考虑使用构建器
- 用私有构造器或枚举类型强化 Singleton 属性
- 通过私有构造器强化不可实例化的能力
- 优先考虑依赖注入来引用资源
- 避免创建不必要的对象
- 消除过期的对象引用
- 避免使用终结方法和清楚方法
- try-with-resources 优先于 try-finally
# 1. 用静态工厂方法代替构造器
- (1)静态工厂有名称。
- (2)不必在每次调用的时候,都创建一个新的对象。 即单例。
- (3)
# 9. try-with-resources 优先于 try-finally
Java 中有很多使用后需要手动关闭的资源,比如:InputStream、OutStream 等。
当使用这些资源的时候,往往会使用这种方式:
```java
FileOutputStream fileOutputStream = new FileOutputStream(dst);
try {
fileOutputStream.write(...);
} finally {
fileOutputStream.close();
}
```
这种方式就算碰到异常情况也可以正常关闭资源,但是如果有多个需要关闭的资源,这种方式写起来就会很臃肿,比如:
```java
FileOutputStream fileOutputStream = new FileOutputStream(dst);
try {
FileOutputStream fO = new FileOutputStream(dst);
try {
fileOutputStream.write(...);
fO.write(...);
} finally {
fileOutputStream.close();
}
} finally {
fO.close();
}
```
如果使用 try-with-resources
的话,只需要:
```java
try (FileOutputStream fO = new FileOutputStream(dst)) {
fO.write(...);
}
--- 多个资源的话使用 `;` 进行分割。
try (
FileOutputStream fO = new FileOutputStream(dst);
FileOutputStream fO = new FileOutputStream(dst)
) {
fO.write(...);
}
// 注意只有中间加 ; 分隔,末尾不加。
```
注意: 能够使用 try-with-resources
进行处理的资源需要实现 AutoCloseable
接口。
# 对于所有对象都通用的方法
该章节有以下几条:
- 覆盖 equals 时请遵守通用约定
- 覆盖 equals 时总要覆盖 hashCode
- 始终要覆盖 toString
- 谨慎地覆盖 clone
- 考虑实现 Comparable 接口
# 类和接口
- 使类和成员的可访问性最小化
- 要在公有类而非公有域中使用访问方法
- 使可变性最小化
- 复合优先于继承
- 要么设计继承并提供文档说明,要么禁止继承
# 泛型
- 接口优于抽象类
- 为后代设计接口
- 接口只用于定义类型
- 类层次优于标签类
- 静态成员类优于非静态成员类
- 限制源文件为单个顶级类
# 枚举和注解
# Lambda 和 Stream
# 方法
# 通用编程
# 异常
# 并发
# 序列化
# 讨论区
由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。
点击查看评论区内容,渴望您的宝贵建议~
代码整洁之道 →