《Effective Java 3》笔记8:避免使用终结器和清除器

本文是 《Effective Java 3》第二章的学习笔记:避免使用终结器和清除器。 介绍 终结器是不可预测的、常常是危险的,通常也是不必要的。 它们的使用可能导致不稳定的行为、低效率和可移植性问题。终结器有一些有效的用途,我们稍后会介绍,但通常情况下应该避免使用它们。从 Java 9 开始,终结器已经被弃用,但它们仍然被 Java 库使用。Java 9 中终结器的替代品是清除器。 清除器的危险比终结器小,但仍然不可预测、缓慢,而且通常是不必要的。 ...

2023-05-08 · 9 min · 4409 words · chensoul

《Effective Java 3》笔记9:使用 try-with-resources 优于 try-finally

本文是 《Effective Java 3》第二章的学习笔记:使用 try-with-resources 优于 try-finally。 介绍 Java 库包含许多必须通过调用 close 方法手动关闭的资源。常见的有 InputStream、OutputStream 和 java.sql.Connection。关闭资源常常会被客户端忽略,这会导致可怕的性能后果。虽然这些资源中的许多都使用终结器作为安全网,但终结器并不能很好地工作。 ...

2023-05-08 · 5 min · 2336 words · chensoul

《Effective Java 3》笔记4:用私有构造函数使类不可实例化

本文是 《Effective Java 3》第二章的学习笔记:用私有构造函数使类不可实例化。 介绍 使用私有构造函数强制实现不可实例化的主要原因是防止类被意外地实例化,以使代码更加健壮和可靠。在某些情况下,我们只需要使用类中的静态方法和静态字段,而不需要创建该类的实例。如果类中没有显式地定义私有构造函数,Java 编译器将会自动为该类生成一个默认的公共构造函数,这意味着该类可以在其他类中被实例化。如果这不是我们想要的,为了防止其他人意外地实例化我们的类,我们可以将构造函数设置为私有。 ...

2023-05-05 · 5 min · 2151 words · chensoul

《Effective Java 3》笔记7:排除过时的对象引用

本文是 《Effective Java 3》第二章的学习笔记:排除过时的对象引用。 介绍 “Eliminate obsolete object references” 是一条 Java 编程最佳实践的原则,指的是在代码中及时清理不再使用的对象引用,以避免内存泄漏和性能问题。当一个对象不再需要时,应该尽快将其引用设置为 null,这样 JVM 可以及时回收它所占用的内存。 ...

2023-05-05 · 12 min · 5701 words · chensoul

《Effective Java 3》笔记6:避免创建不必要的对象

本文是 《Effective Java 3》第二章的学习笔记:避免创建不必要的对象。 介绍 创建对象时,经常会复用对象。如果对象是不可变的,那么它总是可以被复用的。 下面一个例子: 1 String s = new String("bikini"); // DON'T DO THIS! 该语句每次执行时都会创建一个新的 String 实例,而这些对象创建都不是必需的。String 构造函数的参数 ("bikini") 本身就是一个 String 实例,在功能上与构造函数创建的所有对象相同。如果这种用法发生在循环或频繁调用的方法中,创建大量 String 实例是不必要的。 ...

2023-04-24 · 14 min · 6514 words · chensoul

《Effective Java 3》笔记5:依赖注入优于硬编码资源

本文是 《Effective Java 3》第二章的学习笔记,在整理笔记过程中,通过 chatgpt 的帮助做了一些扩展。 介绍 依赖注入是软件工程中使用的一种设计模式,用于将组件和依赖项相互解耦。而不是在组件内部创建和管理依赖项,我们从外部传递它们。这种方法可以帮助创建更模块化和灵活的代码。 ...

2023-04-17 · 15 min · 7268 words · chensoul

《Effective Java 3》笔记3:使用私有构造函数或枚举类型创建单例

本文是 《Effective Java 3》第二章的学习笔记,在整理笔记过程中,通过 chatgpt 的帮助做了一些扩展。 介绍 单例是一个只实例化一次的类。单例通常表示无状态对象,比如函数或系统组件,它们在本质上是唯一的。将一个类设计为单例会使它的客户端测试时变得困难, 除非它实现了作为其类型的接口,否则无法用模拟实现来代替单例。 ...

2023-04-11 · 13 min · 6495 words · chensoul

《Effective Java 3》笔记1:静态工厂方法代替构造函数

本文是 《Effective Java 3》第二章的学习笔记,在整理笔记过程中,通过 chatgpt 的帮助做了一些扩展。 介绍 静态工厂方法是指在类中定义一个静态方法,用于创建该类的实例。示例: 1 2 3 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 与构造函数不同的是,静态工厂方法可以有自己的名称,并且可以根据参数的不同返回不同的对象实例。 ...

2023-04-03 · 7 min · 3347 words · chensoul

《Effective Java 3》笔记2:使用构造器代替构造方法

本文是 《Effective Java 3》第二章的学习笔记,在整理笔记过程中,通过 chatgpt 的帮助做了一些扩展。 介绍 当一个类需要多个构造函数参数时,可以考虑使用构建器模式来创建对象。构建器模式是一种创建对象的设计模式,它可以通过链式调用方法的方式来设置对象的构造参数,并最终返回一个构造完整的对象。 ...

2023-04-03 · 15 min · 7117 words · chensoul