0005JDK源码分析之静态工厂方法使用

Posted Java框架源码分析

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0005JDK源码分析之静态工厂方法使用相关的知识,希望对你有一定的参考价值。

本文将介绍java.lang包下的Boolean类,以及其使用的静态工厂方法。

本文大纲:

       一、Boolean类介绍

       二、何为静态工厂方法?

       三、静态工厂方法的优缺点

       四、静态工厂方法的应用案例


一、Boolean类介绍

Boolean类是原生boolean类型的包装类。Boolean类提供了很多便利的操作布尔值的方法,其中包括静态工厂方法创建实例。下图是Boolean类对外开放的API,图标解释:F-final,S-static,C-constructor。在Eclipse IDE里面打开Boolean类源码,按F4就可以看到这个结构图。

【0005】JDK源码分析之静态工厂方法使用

二、何为静态工厂方法?

创建实例有两种常用方式,一种是通过构造器,另一种是通过静态工厂方法。静态工厂方法大概是这种形式:public static 实例类型 方法名(参数)。比如Boolean中的静态工厂有valueOf()方法,代码如下:

Boolean类中缓存了两个实例,一个是TRUE,另一个是FALSE。当使用valueOf静态工厂方法创建实例时,返回的都是这两个实例之一,节省了空间与资源。如果是使用构造器,则会创建不同的对象实例,相对消耗更多的资源。这也是使用静态工厂方法的一个好处之一,可以使用缓存的对象实例,减少频繁创建对象。


三、静态工厂方法的优缺点

为了更准确的描述静态工厂方法的优缺点,引用《Effective Java》一书的定义,该书包含了很多实用编程技巧。

优点:

1、静态工厂方法与构造器不同的第一大优势在于,它们有名称。构造器是通过参数来判断构造了具有什么属性和行为的对象,而工厂方法则可以通过方法名来判断,更加易于阅读。

2、静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象。BooleanvalueOf方法返回的就是缓存对象,不用重复创建对象。

3、静态工厂方法与构造器不同的第三大优势在于,可以返回原返回类型的子类型的任意对象。如此一来,在创建对象时提供了更多的便利性。

4、静态工厂方法的第四大优势在于,在创建参数化类型实例的时候,更加简洁。

缺点:

1、与其他的静态方法没有区别,不能明显知道哪些是创建实例的静态工厂方法,需要查看API。但是一般静态的工厂方法都遵守一定命名规则,如:getInstancenewInstancenewTypegetTypecreate等。

2、类如果不含有共有的或受保护的构造器,不能被实例化。


四、静态工厂方法的应用案例

Boolean类的实现,是一个很好的案例。其次,我也提供一个案例,代码如下:

五、总结

本文以Boolean为入口引出静态工厂方法,描述了静态工厂方法的优缺点,同时也提供了两个案例,一个是JDK中的Boolean类,一个是本人写的小案例。前者应用了静态工厂方法的第二个优势,后者应用了静态工厂方法的第三个优势。

以上是关于0005JDK源码分析之静态工厂方法使用的主要内容,如果未能解决你的问题,请参考以下文章

JDK动态代理[2]----JDK动态代理的底层实现之Proxy源码分析

0013JDK源码分析之枚举

设计模式之JDK动态代理源码分析

JDK动态代理源码

JDK动态代理源码

JDK动态代理源码