《Effective Java》读书笔记01-静态方法与构造器

一、序言

程序设计的几条基本原则:

1、清晰性和简洁性最为重要,模块的用户永远也不应该被模块的行为所迷惑,所以写良好的注释是必需的。

2、模块要竟可能小,但也不能太小,好一个深奥的哲学问题。

3、代码应该被重用,而不是应该被拷贝,拷贝的代码哪天就是你的灾难。

4、模块的依赖性应该尽可能地降到最小,低耦合是必须的。

5、错误应该尽早被检测出来,最好是在编译时刻,否则你的这次运行就白费了。

6、永远要注重自己写的代码是否足够清晰,正确,可用,健壮,灵活和可维护。

Java语言支持的四种类型:

接口(interface),类(class),数组(array)和基本类型(primitive)。前三种类型通常称为引用类型(reference type),类实例和数组是对象,基本类型的值则不是对象。另外java中方法签名不包括返回类型,这不同于C++,所以如果两个方法签名如果只是返回类型不同,在java中是不合理的。

二、创建对象的两种方式

1、提供公有的构造器。

2、提供一个返回类实例的静态方法。

三、使用静态方法创建对象

优势:

1、静态方法有名称,产生的客户端代码更易于阅读。

2、静态方法不必在每次调用它们的时候都创建一个新对象。对于不可变类,可以预先使用构建好的实例,或将构建好的实例缓存起来,进行重复利用,从而避免创建不必要的       重复对象。

3、静态方法可以返回原返回类型的任何子类型的对象,这对于基于接口的框架提供了更大的灵活性。

4、静态方法在创建参数化类型实例的时候,可以使代码变得更加简洁。

缺点:

1、类如果不含公有的或受保护的构造器,就不能被子类化。有时这正好是优势,复合比继承更高效。

2、用于创建对象静态方法的静态方法实际上与其他静态方法没有任何区别,所以除非文档有详细的描述,否则很难找到如何实例化通过这种方法创建的类对象。

最佳实践:

1、当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器,并且慎重地选择名称以便突出它们之间的区别。

2、要求客户端通过接口来引用被返回的对象,而不是通过它的实现类,即返回类型为接口而不是实现类。

3、使用惯用名称来命名静态工厂方法:

valueOf:不太严格的讲,该方法返回的实例与它的参数具有相同的值,这样的静态工厂方法实际上是类型转换方法。

of:valueOf的一种更为简洁的替代,在EnumSet中使用并流行起来。

getInstance:返回的实例是通过方法的参数来描述的,但是不能够说与参数具有同样的值。对于Singleton来说,该方法没有参数,且返回唯一的实例。

newInstance:像getInstance一样,但newInstance能够确保返回的每个实例都与其他所有实例不同。

getType:像getInstance一样,但在工厂方法处于不同的类中时使用。Type表示工厂方法所返回的对象类型。

newType:像newInstance一样,但在工厂方法处于不同的类中时使用。Type表示工厂方法所返回的对象类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值