获得一个类的实例的传统方法是公共的构造方法,还可以提供一个公共的静态工厂方法(一个返回值为该类实例的简单静态方法),

例如Boolean(boolean 的封装类)

  public static Boolean valueOf(boolean b) {

    return b ? Boolean.TRUE : Boolean.FALSE;

  }

此方法将boolean的原始值转变成Boolean对象的引用。

注意:这里的静态工厂方法与设计模式中的工厂方法不一样。静态工厂方法有优缺点。

优点:①与构造方法相比,静态工厂方法有名称。构造方法的参数本身没有描述被返回的对象,这时,静态工厂可以有一个很好的名字,使得使用者很好的阅读和使用。例如构造方法Constructor BigInteger(int, int, Random),返回一个可能是素数的大数,使用工厂方法BigInteger.probalePrime()可以更好的描述,这个方法在java1.4被加入到BigInteger类中。

   ②与构造方法比,静态工厂方法不需要在每次被调用的时候创建新的对象。

   ③可以返回的对象更丰富(返回对象的类或其子类)

   ④

Effective Java P2 Item1 Consider static factory methods instead of constructors的更多相关文章

  1. Effective Java - Item 1: Consider static factory methods instead of constructors

    考虑使用静态工厂方法来替代构造方法, 这样的做的好处有四点. 1. 更好的表意 有的构造方法实际上有特殊的含义, 使用静态工厂方法能更好的表达出他的意思. 例如 BigInteger(int, int ...

  2. Effective Java 01 Consider static factory methods instead of constructors

    Advantage Unlike constructors, they have names. (BigInteger.probablePrime vs BigInteger(int, int, Ra ...

  3. 读Effective Java笔记之one:static Factory methods instead of Constructors (静态工厂方与构造器)

    获取类的实例的方法有很多种,在这很多种方法中,它们各有优缺,各有特点.这里,只介绍2中方法 1.使用构造方法 public class Person { private String sex; /** ...

  4. effective java 3th item1:考虑静态工厂方法代替构造器

    传统的方式获取一个类的实例,是通过提供一个 public 构造器.这里有技巧,每一个程序员应该记住.一个类可以对外提供一个 public 的 静态工厂方法 ,该方法只是一个朴素的静态方法,不需要有太多 ...

  5. Effective Java P2 Creating and Destroying Objects

    This chapter concerns creating and destorying objects : when and how to create them, when and how to ...

  6. Effective Java Index

    Hi guys, I am happy to tell you that I am moving to the open source world. And Java is the 1st langu ...

  7. Effective Java 第三版笔记(目录)

    <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时 ...

  8. Effective Java 目录

    <Effective Java>目录摘抄. 我知道这看起来很糟糕.当下,自己缺少实际操作,只能暂时摘抄下目录.随着,实践的增多,慢慢填充更多的示例. Chapter 2 Creating ...

  9. 【Effective Java】阅读

    Java写了很多年,很惭愧,直到最近才读了这本经典之作<Effective Java>,按自己的理解总结下,有些可能还不够深刻 一.Creating and Destroying Obje ...

随机推荐

  1. Ukulele 原来你也在这里

  2. ios之UIPageControl

    分页控件是一种用来取代导航栏的可见指示器,方便手势直接翻页,最典型的应用便是iPhone的主屏幕,当图标过多会自动增加页面,在屏幕底部你会看到原点,用来只是当前页面,并且会随着翻页自动更新. 一.创建 ...

  3. iOS开源库

    项目告一段落,总结一下最近学习到的优秀的三方库,希望能帮到别人. (一)网络中常用的 1.网络库:AFNetworking 2.图片缓存:SDWebImage 3.网络监测  Reachability ...

  4. Git学习——创建本地仓库、提交文件

    创建Git仓库 新建或找一个存在的文件夹,在命令行进入该文件夹,输入命令 git init 添加文件到Git仓库 首先使用命令git add <file>,可以多次添加文件: 使用命令gi ...

  5. windows2012安装sql2012报错

    一. 处理

  6. Processed foods make us fatter easily

    From Business Insider Here's an experiment: sit alone in a hospital room for two weeks and eat nothi ...

  7. Linux内核中的段属性

    #define __init __attribute__ ((__section__ (".init.text")))

  8. 一个线程中lock用法的经典实例

    /* 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 作者:http://h ...

  9. Java面试——从JVM角度比较equals和==的区别

    1.  Java中数据类型分类 1.1    基本数据类型 又称为原始数据类型,byte,short,char,int,long,float,double,boolean,他们之间的比较应该使用(== ...

  10. Git常用的基本操作

    一.如何学习git指令 1.查看帮助:git help2.查看指定命令:git help clone3.搜索关键字:/chone 4.退出帮助文档:输入Q 二.常见命令 1.初始化git本地仓库:先进 ...