Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 4. 使用私有构造方法执行非实例化 偶尔你会想写一个类,它只是一组静态方法和静态属性. 这样的类获得了不好的名声,因为有些人滥用这些类而避免以面向对象方式思考,但是它们确实…
在许多时候,我们会写一个类,这个类只是用来提供一些静态方法或静态属性,就好像C++的函数一样,比如 java.lang.Math,java.util.Arrays等,但是有时候这些类的用户可能会在无意思的情况下是构造函数生成一个这个类的对象,但是这个对象没有任何意义. 这样实例类(utility classes)原本不使用来实例化的,但是编译器会在没有显示提供构造函数的情况下提供一个公共的,无参的构造函数.为了避免这种情况,我们可以直接包含一个私有的构造方法来防止这种类的实例化: public…
第三条 用私有构造器或者枚举类型强化singleton属性 singleton指只能被实例化一次的类,即将构造器设置为私有,使用公有静态成员来实例化,且只实例化一次对象 第四条 通过私有构造器强化不可实例化的能力 虽然一个类只包含静态方法和静态域是很不面向对象的,但是将构造器置为私有,仍然被一些工具类所使用,比如java.lang.Math就只有一个 private的构造器,private的构造器表明类不想被实例化,他里面包含的都是static的方法 如果在private的构造器中再添加一个as…
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.JVM.分布式之类的.在今年面试的时候深受打击,到处都是问分布式.集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式.集群之类的? 2016书单如下: 1.深入理解Java虚拟机:JVM高级特性与最佳实践---(已看,预计今年看三遍) 2.Oracle查询优化改写技巧与案例---(已看) 3.Ef…
Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. Background 看了历史, 写第一篇笔记居然是2016年的事情了, 中间半途而废搁置了好长时间, 去年生病的时候捡起来看了一些, 今年终于看完了. 做这个笔记的目的主要是为了个人学习, 把一本书读薄, 也留下以后可以查阅翻阅的资料. 写博客这么多年, 我觉得有一个很大的好处是, 有时候会有一个…
一.考虑用静态工厂方法代替构造器 这里的静态工厂方法是指类中使用public static 修饰的方法,和设计模式的工厂方法模式没有任何关系.相对于使用共有的构造器来创建对象,静态工厂方法有几大优势: 1.静态工厂方法有名称:通过有意义的静态工厂方法名称可以很好的表达工厂方法的作用,易于区别功能相似的多个静态工厂方法. 2.静态工厂方法可以有更复杂的生产对象逻辑,不仅仅是新建一个对象:既可以新建一个对象,也可以使用缓存的对象. 3.静态工厂方法可以返回原返回类型的任何子类型的对象:由于接口不能有…
第四条:通过私有构造器强化不可实例化的能力 有时可能需要编写只包含静态方法和静态域的类,这样的工具类不希望被实例化,因为实例化对它来说没有意义. 然而,在缺少显式构造器的情况下,系统会自动提供一个缺省构造,但这种类又不能设计为抽象类,因为它不希望被继承,也不希望它的子类能实例化. 所以,可以为其提供一个显式的私有构造器,保证不能从类的外部调用构造,代码如下: public class UtilityClass{ private UtilityClass(){ throw new Assertio…
这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文<java中final与static的使用场景总结>. 什么是静态工厂方法? 可以参考书中的例子(摘自JDK1.7 java.lang.Boolean) public final class Boolean implements java.io.Serializable, Comparable<…
1.优先考虑用静态工厂方法代替构造器2.遇到多个构造器参数时要考虑使用构建器Builder解决参数过多,不可变类型.私有构造方法,静态类的构造方法提供必要参数,剩下可选.new xxx.build()3.用私有构造器或者枚举类型强化Singleton属性.单例:无状态.实现单例如果实现序列化接口,可能会在序列化和反序列化导致有多个实例产生.枚举的实现方法可以解决,但是枚举不太好去继承.枚举是目前最佳实现单例的方法.4.通过私有构造器强化不可实例化的能力5.优先考虑依赖注入来引用资源.资源都是单例…
创建和销毁对象 >考虑用静态工厂方法替代构造器. 优点: ●优势在于有名称. ●不必再每次调用他们的时候都创建一个新的对象. ●可以返回原返回类型的任何子类型的对象. ●在创建参数化类型实例的时候,他们使代码更加简洁. 缺点: ●类如果不含公有的或者受保护的构造器.就不能被子类化. ●他们与其他的静态方法没有任何区别. >遇到多个构造器参数的时候考虑用构建器. >用私有的构造器或者枚举类型强化Singleton属性. >通过私有构造器强化不可实例化的能力. >避免创建不必要的…