effective java读书笔记(上)

effective java读书笔记(上)

ID:6141370

大小:4.31 MB

页数:32页

时间:2018-01-04

effective java读书笔记(上)_第1页
effective java读书笔记(上)_第2页
effective java读书笔记(上)_第3页
effective java读书笔记(上)_第4页
effective java读书笔记(上)_第5页
资源描述:

《effective java读书笔记(上)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、EffectiveJava第一章引言第二章创建/销毁对象1.用静态工厂方法代替构造器2.类提供一个共有的静态工厂方法,返回类的实例。3.注意:与工厂模式不同,并不直接对应。4.静态工厂方法比起构造器的优势a)它们有名称:i.如果构造器的参数不能正确描述正被返回的对象,具有适当名称的静态方法更容易使用。ii.当一个类需要多个带有相同签名的构造器时,就可以用静态工厂代替构造器例子:BigInterger.probablePrime()b)不必每次调用它们的时候都创建新的对象:单件模式或者享元模式。i.静态工厂方法能为重复的调用返回相同的类,有助于类控制在哪个时间段存在

2、哪些实例。被称为实例受控的类。c)他们可以返回原返回类型的的任何子类型的实例。i.API可以返回对象,又不会使对象的类变成共有的,适合基于接口的框架。ii.被返回的对象由相关的借口精确指定。iii.共有的静态工厂方法所返回的类不仅可以是非公有的,还可以随着每次调用发生变化,这取决于工厂方法参数值。iv.静态工厂方法返回的对象所属的类,在编写该静态方法时可以不必存在(留给开发者实现)d)在创建参数化实例的时候,它们使代码更为简单i.例子:Map>m=newMap>();Map

3、g,List>m=HashMap.newInstance();//减少一次参数5.静态工厂方法的缺点a)类如果不含公有或者受保护的构造器,就不能被子类化。i.可能鼓励程序员使用复合,而非继承b)它们与其他静态方法没有任何区别。i.要想查明如何实例化一个类是非常困难的ii.静态工厂方法的惯用名称1.ValueOf:类型转换方法2.getInstance:返回唯一的实例1.newInstance:保证每个返回的实例都与其他不同2.getType/newType:返回工厂对象的类2.遇到多个构造器参数时要考虑构建器(建造者模式)1.重叠构造器模式:第一个

4、构造器只有一个必要参数,第二个有一个可选参数,第三个有两个,以此类推,最后一个构造器有全部的可选参数。创建实例的时候,选择最短的列表参数的构造器结论:当有许多参数的时候,客户端代码会很难编写2.JavaBeans模式:调用一个无参数构造器来创建对象,然后用setter方法设置每个必要的参数评价:有严重的缺点,构造过程被分配到几个过程中,JavaBean可能处于不一致的状态。需要程序员付出额外的努力来确保它的线程安全。3.建造者方法:既能保证安全性,又能保证可读性。最好一开始就使用Builder模式.先调用类的builder方法创建一个builder,再用sette

5、r设置各个参数(注意使用returnthis;可以构造参数链),最后调用builder返回一个类a)Builder可以进行域的检查,是否违反约束条件b)Builder可以有多个可变参数c)Builder方法可以自动填充域,也可以返回不同的对象d)使用泛型的buildere)Java传统的抽象工厂实现是Class对象,用newInstance()来build。评价:newInstance()会主动调用无参数的构造函数,而且没有编译时错误,只能在runtime抛出异常。这破坏了编译时的异常检查。f)Builder模式的不足之处:必须先构建Builder对象。可能有性能

6、问题,必须在有很多参数时才适合使用。3.用私有构造器或者枚举类型强化Singleton属性a)注意客户端可以使用反射机制来调用私有的构造方法:应该在类被要求创造第二个实例的时候抛出异常AccessibleObject.setAccessble()b)公有属性的好处:组成类的成员的声明很清楚地表明了这个类是一个Singletonc)工厂方法的好处:它提供了灵活性。在不改变API的前提下可以改变该类是否为Singleton的想法,或者修改成每一个调用的线程都返回一个唯一的实例。d)序列化:仅仅加上implementsSerializable是不够的,需要所有域都是瞬时

7、的,而且提供一个readResolve()方法防止假冒对象。e)编写单个元素的枚举类型:更加简洁,无偿提供序列化机制,而且绝对防止多次实例化,是目前最好的方法。4.通过私有构造器强化不可被实例化的类的特性a)让工具类包含私有构造器,应该加上注释b)副作用:使该类不能被子类化3.避免创建不必要的对象a)如果对象不可变,就始终可以重用。错误的代码:会创建不必要的String实例b)对于同时提供了静态工厂和构造器的不可变类,通常使用静态工厂而不是构造器,以避免创建不必要的对象例子:Boolean.valueOf(String)总是优先于Boolean(String)c)

8、重用一直不

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。