Java避免创建不必要的对象(2)

可见,使用静态工厂方法valueOf不会新建一个对象,避免大量不必要的对象被创建,实际上很多类默认的valueOf方法都不会返回一个新的实例,比如原文提到的Boolean类型,不仅仅是Java提供的这些类型,我们在平时的开发中如果也有类似的需求不妨模仿Java给我们提供的静态工厂方法,给我们自己的类也定义这样的静态工厂方法来实现对象的获取,避免对象的重复创建,但是也不要过度迷信使用静态工厂方法的方式,这种方式也有它的弊端(有关静态工厂方法的知识可以看看《Effective Java》第一条),个人很少使用这种方式,平时的类多创建个对象也不会有太大的影响,只要稍微注意下用法就ok了。

第三部分:除了重用不可变的对象之外,也可以重用那些已知不会修改的可变对象。书上写的例子让人非常难以理解,我也没花时间去看了,我给大家想出来一个类似的例子,也不知道是否是这个意思,多多指教!

反面例子:

1 package com.czgo.effective; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 public class DBUtilBad { 8 private static final String URL = "jdbc:mysql://127.0.0.1:3306/imooc"; 9 private static final String UNAME = "root"; 10 private static final String PWD = "root"; 11 12 public static Connection getConnection() { 13 Connection conn = null; 14 try { 15 // 1.加载驱动程序 16 Class.forName("com.mysql.jdbc.Driver"); 17 // 2.获得数据库的连接 18 conn = DriverManager.getConnection(URL, UNAME, PWD); 19 } catch (ClassNotFoundException e) { 20 e.printStackTrace(); 21 } catch (SQLException e) { 22 e.printStackTrace(); 23 } 24 return conn; 25 } 26 }

该类提供的getConnection方法获取JDBC数据库连接对象,每次调用该方法都会新建一个conn实例,而我们知道在平时的开发中数据库连接对象往往只需要一个,也不会总是去修改它,没必要每次都去新创建一个连接对象,每次都去创建一个实例不知道程序会不会出现什么意外情况,这个我不知道,但有一点是肯定的,这种方式影响程序的运行性能,增加了Java虚拟机垃圾回收器的负担。我们可以对它进行改进。

改进版本:

1 package com.czgo.effective; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.SQLException; 6 7 public class DBUtil { 8 private static final String URL = "jdbc:mysql://127.0.0.1:3306/imooc"; 9 private static final String UNAME = "root"; 10 private static final String PWD = "root"; 11 12 private static Connection conn = null; 13 14 static { 15 try { 16 // 1.加载驱动程序 17 Class.forName("com.mysql.jdbc.Driver"); 18 // 2.获得数据库的连接 19 conn = DriverManager.getConnection(URL, UNAME, PWD); 20 } catch (ClassNotFoundException e) { 21 e.printStackTrace(); 22 } catch (SQLException e) { 23 e.printStackTrace(); 24 } 25 } 26 27 public static Connection getConnection() { 28 return conn; 29 } 30 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5622a5ef41fdd20aa40230640a7dde28.html