这一系列博客都是《Effective java》第二版的读书笔记,如果大家想深入了解的话建议读一读原书。
第二章 创建和销毁对象
本章主题:何时以及如何创建对象,何时以及如何避免创建对象,如何确保它们能够实时的销毁,以及销毁之前必须进行的各种清理动作。
第1条:考虑用静态工厂方法代替构造器。
对于类而言,为了让客服端获得它的一个实例最常用的的一个方法就是提供一个公有的构造器。还有一种方法,类可以提供一个公有的静态工厂方法(static factory method),它只是一个返回类实例的静态方法。
例如:
public static Boolean valueof(boolean b){ return b? Boolean.TRUE:Boolean.FALSE; }
通过静态工厂方法构造对象的优势:
1)静态工厂方法与构造器不同的第一大优势在于,它们有名称,使客服端代码更加容易被阅读。
2)不必在每次调用的它们的时候都创建一个新的对象(这个完全取决于具体的实现)。
3)它们可以返回原返回类型的任何子类型的对象。
这种灵活性的一种应用:API可以返回对象,同时又不会使对象的类变成公有的。公有的静态方法所返回的对象的类不仅可以是非公有的,而且该类还可以随着每次调用而发生变化着取决于静态工厂方法的参数值,只要是已声明返回类型的子类型,都是允许的。
4)在创建参数化类型(也就是泛型,jdk1.5新特性)实例的时候,它们是的代码变得更加简洁。
/**普通创建****/ Map<String,List<String>> m=new HashMap<String,List<String>>; /**有了静态方法过后***/ Map<String,List<String>> m=HashMap.newInstance(); //前提HashMap提供了这个静态工厂方法 public static <k,v> HashMap<k,v> newInstance(){ return new HashMap<K,V>(); }
静态工厂方法的主要缺点在于:1)类如果不含有他的公有或者受保护的构造器,就不能被子类化(即被继承)。
2)它们与其他静态方法实际上没有任何区别。
相关推荐
这些连接池会在应用启动时预创建一定数量的数据库连接,并在空闲时回收,从而减少连接创建和销毁的开销。 在Java应用部署时,确保正确配置了数据库连接参数,例如URL、用户名和密码。对于生产环境,还需要考虑负载...
MySQL Connector/J是MySQL数据库与Java应用程序之间的重要桥梁,它是一个实现了Java Database Connectivity (JDBC) API的驱动程序,使得Java开发者能够方便地在MySQL数据库上执行SQL查询和操作。在这个"mysql-...
它们管理数据库连接,避免频繁创建和销毁连接,提升系统效率。 8. **安全性** 对于敏感的数据库连接信息,如用户名和密码,应避免硬编码在代码中,而是使用环境变量、配置文件或者密钥管理服务存储。 9. **兼容性...
8. **连接池**:在实际应用中,为了提高性能和资源利用率,通常会使用连接池(如C3P0、HikariCP或Apache DBCP),它管理数据库连接的生命周期,避免频繁创建和销毁连接。 9. **异常处理**:在使用JDBC时,需要妥善...
这些连接池库可以复用已建立的连接,减少创建和销毁连接的开销,提高应用性能。 9. **安全性**: 这个版本的驱动可能加强了安全性,支持更安全的认证方法,如SSL连接,以及对新的MySQL身份验证插件的支持。 10. **...
在Java编程中,创建和销毁对象是至关重要的操作,它们直接影响到程序的性能和内存管理。本文将深入探讨Java中创建对象的几种方法以及对象的销毁。 首先,我们来看看创建对象的基本方式——构造器。构造器是每个类都...
这个库的核心功能是提供一个高效、灵活的数据库连接池,使得应用程序在处理数据库操作时可以更高效地管理和重用数据库连接,避免了频繁创建和销毁连接带来的性能开销。 C3P0连接池的主要特点包括: 1. **连接自动...
这个方法接受两个参数:前缀和后缀,返回一个`File`对象表示新创建的临时文件。例如: ```java import java.io.File; import java.io.IOException; public class TempFileExample { public void createTempFile()...
- 在实际应用中,为了提高性能和资源利用率,通常使用连接池(如C3P0、HikariCP、Apache DBCP等),它们管理数据库连接的生命周期,避免频繁创建和销毁连接。 8. **版本兼容性**: - `mysql-connector-java-...
此外,了解如何配置连接池(如C3P0、HikariCP或Apache DBCP)也是提高应用性能的关键,连接池能有效管理和复用数据库连接,减少创建和销毁连接的开销。 总之,`mysql-connector-java-5.1.46.jar`是Java开发者与...
1. **对象池技术**:对于频繁创建和销毁的对象,可以使用对象池避免频繁的内存分配和回收。 2. **减少对象创建**:尽量复用对象,减少不必要的new操作,例如使用StringBuilder而非String进行字符串拼接。 3. **...
6. **性能优化**:包括连接池管理,减少频繁创建和销毁连接的开销,以及使用Statement和PreparedStatement的缓存,加快执行速度。 7. **错误处理和诊断**:提供详细的错误信息和警告,方便调试和问题排查。 8. **...
对象池的概念是预先创建一组对象并存储在池中,当需要时可以从池中获取,而不是每次都新建对象,这大大减少了对象创建和销毁的开销,提高了性能。Commons Pool提供了Poolable接口和相关的类,使得开发者可以自定义...
JAVA 中销毁一个对象的方法可以分为三种:垃圾回收器、finalize 方法和 System.gc 方法。 方法一:垃圾回收器 垃圾回收器是 Java 平台中用的最频繁的一种对象销毁方法。垃圾回收器会全程侦测 Java 应用程序的运行...
在Java编程语言中,对象的生命周期和销毁是一个关键的概念,它涉及到内存管理和性能优化。下面我们将详细讨论Java中对象的创建、使用以及销毁的过程。 首先,对象的创建通常通过`new`关键字完成,这会在堆内存中...
这在需要频繁创建和销毁对象,或者对象创建代价高昂时特别有用,例如线程池或缓存服务。 2. **工厂方法模式**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。它将对象的实例化过程...
Java对象池技术是一种优化资源管理的方法,主要用于减少创建和销毁对象的开销,尤其是在频繁创建和销毁对象的应用场景中。其基本思想是预先创建并维护一组可重用的对象,当程序需要一个对象时,可以从池中获取,而...
在实际开发中,`mysql-connector-java-5.0.8`还涉及到性能优化,例如设置合适的连接池,以减少数据库连接的创建和销毁开销。同时,对于大数据量的操作,可以使用批量插入和批量更新来提升效率。 总之,`mysql-...
创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 12 - 序列化 第 2 章 - 创建和销毁对象 第 1 项 - 考虑静态工厂...
在大量创建和销毁对象的应用中,可以使用对象池或缓存来提高性能。例如,`java.util.concurrent`包下的`ConcurrentHashMap`可以作为简单的对象缓存。 8. JSON序列化 除了二进制序列化,Java还可以使用如Jackson或...