一. 考虑用静态工厂方法代替构造器: 1)静态工厂方法与构造器不同的第一大优势在于:他们有名称.当一个类需要多个带有相同签名的构造器时,就用静态方法代替构造器,并慎重的选择名称以突出他们间的区别: 2)静态工厂方法第二大优势: 不必在每次调用他们的时候都创建一个新对象: 3)静态工厂方法第三大优势: 他们可以返回原返回类型的任何子类型的对象: 4)静态工厂方法第四大优势: 在创建参数化类型实例的时候,他们使代码变得更整洁: 5)静态工厂方法缺点一:类如果不含公共的或者受保护的构造器,就不能被子类…
本文参考 本篇文章参考自<Effective Java>第三版第一条"Consider static factory methods instead of constructors" 另外参考了其它几篇文章的解读: https://www.cnblogs.com/dyj-blog/p/8867028.html https://blog.csdn.net/u014129886/article/details/89670049 前言 第一条的篇章来自"Creating…
此文做为<Effective Java>系列的第一篇,所以有必要大概说下此书的特点,当然很多人可能都看过,毕竟是有着Java四大名著之一的大名在外,不过总会有萌新不了解,例如我!<Effective Java>第三版较之上一版新增了对Java7.8.9的一些新特性的条目.而条目的概念可以理解为武功秘籍中的一招一式,学完了每一招一式,就是神功大成之时.第三版在第二版的基础上新增了一些条目数,达到了90条.书就介绍到这里,下面介绍第一条——用静态工厂代替构造器. 对于创建对象,最熟悉的…
获取类的实例的方法有很多种,在这很多种方法中,它们各有优缺,各有特点.这里,只介绍2中方法 1.使用构造方法 public class Person { private String sex; /** * <构造函数> */ public Person(String sex) { this.sex = sex; System.out.println("this is constructor method"); } } 调用如下: public static void mai…
Effective Item - 考虑用静态工厂方法代替构造器我们有两种常见的方法获得一个类的实例: 公有的构造器 提供静态工厂方法(static factory method) 相对公有的构造器,静态工厂方法有以下几大优势. 优势1.静态工厂方法的名称,因此比构造器更准确地描述返回的实例. 比如BigInteger.probablePrime方法: public static BigInteger probablePrime(int bitLength, Random rnd) { if (b…
本文转载自:https://www.jianshu.com/p/ceb5ec8f1174 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第三个优势,可以返回原返回类型的子类 2.4 第四个优势,在创建带泛型的实例时,能使代码变得简洁 除此之外 3.1 可以有多个参数相同但名称不同的工厂方法 3.2 可以减少对外暴露的属性 3.3 多了一层控制,方便统一修改 总结 1. 序…
最近看<Effective Java>这本被很多同行称为神作的书,但是这本书很多地方缺少了举例不好懂,下面是关于我对书上知识的理解. 一.<Effective Java>中文版2  ——第二章  第2条:遇到多个构造器参数时要考虑用构建器 原文语段:遗憾的是,JavaBeans模式自身有着很严重的缺点.因为构造过程被分到了几个调用中,在构造过程中JavaBean可能处于不一致的状态.类无法仅仅通过检验构造器参数的有效性来保证一致性.试图使用处于不一致状态的对象,将会导致失败,这种失…
上课时yqj2065要求:除了JDK等框架或工具中的类,自己编写的类不得使用new创建对象(Test除外). 据说是因为使用new会涉及到硬编码.(不是很懂) 所以要求用God类利用反射+配置文件来创建对象. 下面介绍如何创建并使用tool包中的工具类God: 1.属性配置文件 Java程序通常处理的配置文件有两种类型①XML格式的配置文件.②属性配置文件(.properties文件) 属性配置文件是一种简单的.易解析的文件格式.该.properties文件是一个文本文件,仅包含两种语法. 前面…
实现Singleton(代表本质上唯一的系统组件)的三种方法: 1. 保持私有构造器,导出公有的静态成员,客户端访问该类的唯一实例. 2. 保持私有构造器,公有的成员是静态工厂方法. 3. 单元素的枚举类型已经成为实现Singleton的最佳方法. 前两种方法有两点注意: 1. 享有特权的客户端可以通过反射机制调用私有构造器.如果需要抵御这种攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常. 2. 如果要使其变成可序列化的,需要: (1) implement Serializabl…
工具类(utility class)不希望被实例化,比如只包含静态方法和静态域的类.为了这个目的,需要让这个类包含一个私有构造器. // 私有构造器示例 public class UtilityClass { // 为该类不能被实例化.子类化添上注释 private UtilityClass() { // 避免不小心在类的内部调用构造器 throw new AssertionError(); } } 其他不可行方法和理由: 1. 将类写成抽象类:可被子类化,甚至误导用户子去继承这个类. 2. 不…