# Effective Java

# 参考文档

# 简介

全书除第一章引言外,一共 90 条内容,简单分为十一个章节。

# 创建和销毁对象

该章节有以下几条:

  1. 用静态工厂方法代替构造器
  2. 遇到多个构造器参数时要考虑使用构建器
  3. 用私有构造器或枚举类型强化 Singleton 属性
  4. 通过私有构造器强化不可实例化的能力
  5. 优先考虑依赖注入来引用资源
  6. 避免创建不必要的对象
  7. 消除过期的对象引用
  8. 避免使用终结方法和清楚方法
  9. 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 接口。

# 对于所有对象都通用的方法

该章节有以下几条:

  1. 覆盖 equals 时请遵守通用约定
  2. 覆盖 equals 时总要覆盖 hashCode
  3. 始终要覆盖 toString
  4. 谨慎地覆盖 clone
  5. 考虑实现 Comparable 接口

# 类和接口

  1. 使类和成员的可访问性最小化
  2. 要在公有类而非公有域中使用访问方法
  3. 使可变性最小化
  4. 复合优先于继承
  5. 要么设计继承并提供文档说明,要么禁止继承

# 泛型

  1. 接口优于抽象类
  2. 为后代设计接口
  3. 接口只用于定义类型
  4. 类层次优于标签类
  5. 静态成员类优于非静态成员类
  6. 限制源文件为单个顶级类

# 枚举和注解

# Lambda 和 Stream

# 方法

# 通用编程

# 异常

# 并发

# 序列化

# 讨论区

由于评论过多会影响页面最下方的导航,故将评论区做默认折叠处理。

点击查看评论区内容,渴望您的宝贵建议~
Last Updated: 6/10/2022, 3:54:48 PM