![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Effective Java
文章平均质量分 85
21世纪的小小达
本人始于1996
展开
-
第3条:用私有构造器或者枚举类型强化Singleton属性
第3条:用私有构造器或枚举类型强化Singleton属性 单例模式(Singleton):当系统中只需要的某个类的唯一对象时,可以使用该模式。Singleton指仅仅被实例化一次的类。Singleton通常被用来代表那些本质上唯一的系统组件。 为什么会用到该模式?因为有时候某些对象的创建需要耗费大量的资源、使用单一(唯一)的对象实例来维护某些共享数据等,在这些场景下即可采用单例模式进行设原创 2015-11-09 12:28:42 · 1009 阅读 · 0 评论 -
第12条:考虑实现Comparable接口
第12条:考虑实现Comparable接口Comparable接口简介 compareTo方法并没有在Object中声明。相反,它是Comparable接口中唯一的一个方法。compareTo方法不但允许进行简单的同等性比较,而且允许执行顺序比较,除此之外,它与Object的equals方法具有相似的特性,还是个涉及到泛型的方法。类实现了Comparable接口,就表明它的实例具有内在的排序关原创 2015-11-19 10:38:57 · 2538 阅读 · 0 评论 -
第11条:谨慎地覆盖clone
第11条:谨慎地覆盖clone Cloneable接口的目的是作为对象的一个mixin接口,这表明这样的对象允许克隆(clone)。遗憾的是,它并没有成功地达到这个目的。其主要的缺陷在于,缺少一个clone方法,object的clone方法是受保护的。如果不借助于反射(reflection),就不能仅仅因为一个对象实现了Clonable接口,就可以调用clone方法。即使是反射的调用也可能失败原创 2015-11-18 08:21:52 · 1137 阅读 · 0 评论 -
第9条:覆盖equals时总要覆盖hashCode
第9条:覆盖equals时总要覆盖hashCodeHashCode规范 一个很常见的错误根源在于没有覆盖hashCode方法。在每个覆盖了equals方法的类中,也必须覆盖hashCode方法。如果不这样的话,就会违反Object.hashCode的通用约定,从而导致该类无法结合所有基于散列的集合一起愉快的正常运作,这样的集合包括HashMap,HashSet以及Hashtable。 下原创 2015-11-14 11:17:18 · 1213 阅读 · 0 评论 -
第8条:覆盖equals时请遵守通用约定
第8条:覆盖equals时请遵守通用约定无需覆盖 覆盖equlas方法盘起来似乎很简单,但是有许多覆盖方式会导致错误,并且后果非常严重。最容易避免这类问题的办法就是不覆盖equals方法,在这种情况下,类的每个实例都只与它自身相等。如果满足了下面任何一个条件,就是所期望的结果: 1. 类的每个实例本质上都唯一。对于代表活动实体而不是值的类来说的确如此,例如Thread。 2. 不关心类是否提供原创 2015-11-13 17:36:47 · 1090 阅读 · 1 评论 -
第7条:避免使用终结方法
第7条:避免使用终结方法(finalizer)缺点 终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要使用它的。使用终结方法会导致行为不稳定,降低性能,以及可移植性的问题,不过终结方法也有其可用之处。 在C++中存在着析构器(destructors)这种帮助回收对象占用资源时的常规方法,是构造器所必需的对应物。但是Java中的终结方法作用并不等同于析构器,当原创 2015-11-12 11:30:34 · 1621 阅读 · 0 评论 -
第6条:消除过期的对象引用
第6条:消除过期的对象引用 当我们从运用手工管理内存的语言时(例如C或者C++)转换到具有垃圾回收功能语言的时候,程序员的工作会变得更高价容易,因为当用完一个对象之后,它们在之后的时间会被自动回收。好多人可能觉得有人帮着收垃圾有点不太习惯= =,还有的人认为就类似请来了一位清洁工,自己就不用再考虑内存管理的事情了。但是事实上还是需要我们去干涉的,看下面的这个例子: public class S原创 2015-11-11 13:24:20 · 1079 阅读 · 0 评论 -
第5条:避免创建不必要的对象
第5条:避免创建不必要的对象 一般来说,最好能重用对象,而不是在每次需要的时候就创建一个相同功能的新对象。重用方式既快速,又不需要消耗额外的内存。如果对象是不可变的(immutable),它就始终可以被重用。 下面有一个比较极端的例子- -,看看:String s = new String("stringette"); 该语句每次被执行的时候都创建一个新的String实例,但是这原创 2015-11-10 15:14:32 · 821 阅读 · 0 评论 -
第4条:通过私有构造器强化不可实例化的能力
第4条:通过私有构造器强化不可实例化的能力 有时候可能只需要编写包含静态方法和静态域的类。这些类的名声很不好,因为有些人再面向对象的语言中滥用这些类来编写过程化的程序。尽管如此,他们也确实有他们特有的用处。我们可以利用这种类,把基本类型的值或者数组类型上的相关方法组织起来,也可以把实现特定接口上的静态方法组织起来,还可以利用这种类把final类上的方法组织起来,以取代扩展该类的做法。 这原创 2015-11-10 12:12:45 · 905 阅读 · 0 评论 -
第13条:使用类和成员的可访问性最小化
第13条:使用类和成员的可访问性最小化简介 区别设计良好的模块和设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏了其内部数据和其他细节。设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰地隔离开来。然后,模块之间只通过它们的API进行通信,一个模块不需要知道其他模块内部的工作情况。这个概念被称为信息隐藏(information hiding)或封装(enc原创 2015-11-20 13:35:31 · 1089 阅读 · 0 评论