04 2015 档案

摘要:嵌套类是指被定义在另一个类的内部的类。 嵌套类存在的目的应该只是为了它的外围类提供服务。如果嵌套类将来有可能会用于其他的某个环境,它就应该是顶层类。 嵌套类有四种:静态成员类,非静态成员类,匿名类,局部类。除了第一种,其他三种称为内部类。 静态成员类是最简单的一种嵌套类。最好把它看做是普通的类,只是碰巧被声明在另一个类的内部而已。 从语法上来讲,静态成员类和非静态成员类之间唯一的区别是,静态成员类... 阅读全文
posted @ 2015-04-30 15:07 wangliyue 阅读(332) 评论(0) 推荐(1) 编辑
摘要:复习策略模式 阅读全文
posted @ 2015-04-30 10:47 wangliyue 阅读(96) 评论(0) 推荐(0) 编辑
摘要:标签类很少有适用的时候。当你想要编写一个包含显示标签域的类时,应该考虑一下,这个标签是否可以被取消,这个类是否可以用类 层次来替代。当你遇到一个包含标签域的现有类时,就要考虑将它重构到一个层次结构中去。 阅读全文
posted @ 2015-04-29 16:03 wangliyue 阅读(132) 评论(0) 推荐(0) 编辑
摘要:当类实现接口时,接口就充当可以引用这个类的实例的类型。因此,类实现了接口,就表明客户端可以对这个类的实例实施接口中的方法。 为了任何其他目的而定义接口是不恰当的。 常量接口:接口中只有常量,定义这个接口,目的是为了让实现这个接口的类,使用定义的常量。 常量接口这种做法应该不被使用。同样的目的,我们可以专门定义个存放常量的工具类来完成。 JDK中几个常量接口:ObjectStreamConstant... 阅读全文
posted @ 2015-04-29 14:51 wangliyue 阅读(177) 评论(0) 推荐(0) 编辑
摘要:Java提供了两种机制,可以用来定义允许多个实现的类型:接口和抽象类。这两种机制之间最明显的区别在于,抽象类允许包含某些方法的实现 , 但是接口则不允许。一个更加重要的区别在与,为了实现抽象类定义的类型,类必须成为抽象类的一个子类,也就是使用extends关键字继承。 任何一个类,只要它定义了所有必要的方法,并且遵守通用约定,它就被允许实现一个接口,而不管这个类是处于类层次的哪个位置,接口实现使用... 阅读全文
posted @ 2015-04-29 14:13 wangliyue 阅读(402) 评论(0) 推荐(0) 编辑
摘要:为继承为设计的类,任何方法中不要调用这个类其他可能被子类覆盖的方法。 构造器中决不能掉用可被覆盖的方法。 阅读全文
posted @ 2015-04-29 09:55 wangliyue 阅读(148) 评论(0) 推荐(0) 编辑
摘要:继承是实现代码重用的有力手段,但是它并非永远是完成这项工作的最佳工具。使用不当会导致软件变得很脆弱。 在包的内部使用继承是非常安全的,在那里,子类和超类的实现都处在同一个程序员的控制之下。 对于专门为了继承而设计,并且具有很好的文档说明的类来说,使用继承也是十分安全的。 然而,对于普通的具体类,进行跨越包边界的继承,则是十分危险的。 组合:不用扩展现有的类,而是在新的类中增加一个私有域,它引用... 阅读全文
posted @ 2015-04-28 17:27 wangliyue 阅读(287) 评论(0) 推荐(0) 编辑
摘要:不可变类只是其实例不能被修改的类。每个实例所包含的信息必须在创建该实例的时候就提供,并在对象的整个生命周期内固定不变。 JDK中已经包含了许多不可变的类,其中有String,基本类型包装类,BigInteger,和BigDecimal。 存在不可变的类的类有许多理由:不可变的类比可变类更加易于设计,实现和使用。它们不容易出错,且更加安全。 为了使类成为不可变的,需要遵循下面五条规则: 1.不要提供... 阅读全文
posted @ 2015-04-27 17:17 wangliyue 阅读(176) 评论(0) 推荐(0) 编辑
摘要:对于一些退化类(没有什么作用,只是用来集中实例域,也可认为是Java Bean)。 如果这样的类是公有类,也就是我们希望客户端代码可以访问这些退化类的实例域,不应该直接使用public来暴漏这些数据域, 而是应该私有域和公有设值方法(setter)来代替。这样做的好处是,如果我们一旦需要改变这个退化类的内部结构,客户端 代码所受的影响最小。否则,如何客户端代码直接使用公有的数据域,这样的代码遍布各... 阅读全文
posted @ 2015-04-27 13:42 wangliyue 阅读(181) 评论(0) 推荐(0) 编辑
摘要:要区别设计良好的模块与设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节。 设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来。然后,模块之间只通过它们的API进行通信,一个模块不需要 知道其他模块的内部工作情况。这被称为信息隐藏或者封装。 由于我们实现了很好的封装,只提供若干的API供客户端代码来访问,非API涉及的类和成员,... 阅读全文
posted @ 2015-04-27 10:52 wangliyue 阅读(442) 评论(0) 推荐(0) 编辑
摘要:与前面讨论的方法不同,compareTo()方法并没有在Object类中定义。相反,它是Comparable接口中唯一的方法。 一个类的实例对象要想是可以比较大小的,那么这个类需要实现Comparable接口,必须正确的实现compareTo()方法。 一个类实现了Comparable接口,就表明这个类的实例对象具有内在的排序关系。 一旦类实现了Comparable接口,那么这个类就可以和依赖于该... 阅读全文
posted @ 2015-04-24 17:20 wangliyue 阅读(228) 评论(0) 推荐(0) 编辑
摘要:一个类要想实现克隆,需要实现Cloneable接口,表明这个类的对象具有克隆的功能。 Cloneable接口是一个mixin接口,它里面并没有任何的抽象方法,类似的接口有Serializable接口,表明该类的对象可以序列化。 首先应该明确通过一个对象克隆出另一个对象的概念:通过一个对象克隆出另一个对象,简称对象1和对象2,这两个对象就成为两个独立的对象, 那么对对象1做任何的修改,对象2应该不受... 阅读全文
posted @ 2015-04-24 15:44 wangliyue 阅读(726) 评论(0) 推荐(0) 编辑
摘要:Object类提供的toString()方法如下: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 如果我们直接打印一个对象,就会调用这个对象的toString()方法,如果我们没有为该类覆盖toString()方法, 我们可以看出toStri... 阅读全文
posted @ 2015-04-23 17:15 wangliyue 阅读(299) 评论(0) 推荐(0) 编辑
摘要:Object类的hashCode方法: public native int hashCode(); 是一个本地方法。 其中这个方法的主要注释如下: Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must... 阅读全文
posted @ 2015-04-23 15:44 wangliyue 阅读(1631) 评论(0) 推荐(0) 编辑
摘要:==是物理相等 equals是逻辑相等 因为每个类的实例对象本质上都是唯一的 ,利用物理相等(==)是指一个实例只能相等于它自己。 利用逻辑相等是(equals)指 一个实例是否和另一个实例的某些关键域相等,从而来判断这两实例是否相等。 Object类的equals方法的实现:物理相等的话就逻辑相等。 什么时候不需要覆盖Object类的equals方法? 1.希望这个类的实例只能和自身相等,... 阅读全文
posted @ 2015-04-22 17:16 wangliyue 阅读(545) 评论(0) 推荐(0) 编辑
摘要:终结方法通常是不可预测的,也是很危险的,一般情况下是不必要的。 如果我们为一个类重写写了Object类的终结方法,那么这个类的实例在被垃圾回收器回收之前会先执行终结方法, 在终结方法中,这个实例对象有可能会被重写引用,也可以用来释放一些资源文件等等,从而不被回收或者对象的善后工作。 终结方法的缺点在与不能保证会被及时的执行。当一个实例对象变得不可达,到这个实例的终结方法被执行,这之间 的时间是任意... 阅读全文
posted @ 2015-04-20 14:59 wangliyue 阅读(133) 评论(0) 推荐(0) 编辑
摘要:消除过期的对象引用,可以让垃圾收集器更好的回收对象,从而避免不必要的内存泄露(memory leak)。在支持垃圾回收的语言中,内存泄露是很隐蔽的(称这类内存泄露为“无意识的对象保持”更为恰当)。如果一个对象引用被无意识地保留起来了,那个垃圾回收机制不仅不会处理这个对象,也不会处理被这个对象所引用的... 阅读全文
posted @ 2015-04-20 10:27 wangliyue 阅读(120) 评论(0) 推荐(0) 编辑
摘要:最好能重用对象而不是每次需要的时候就创建一个相同功能的新对象。如果对象是不可变的,它就始终可以被重用,如String对象。 阅读全文
posted @ 2015-04-20 10:04 wangliyue 阅读(101) 评论(0) 推荐(0) 编辑
摘要:有时候我们可能需要编写只包含静态方法和静态域的类,例如某些工具类。如java.lang.Math 或者 java.util.Arrays这样的工具类不希望被实例化,因为实例对于它们没有任何意义。如果不手写提供一个构造器,编译器会为这个类提供一个public的构造器,所以我们可以通过手写提供一个私有化... 阅读全文
posted @ 2015-04-16 17:08 wangliyue 阅读(148) 评论(0) 推荐(0) 编辑
摘要:Singleton类就是单例类,就是只能被实例化一次的类。需要注意的是,对于单例类变成可序列化,仅仅在声明上加上“implements Serializable” 是不够的,还要将所有的实例域(非static的域)声明为transient(瞬时)的,并提供一个readResolve方法。否则,我们反... 阅读全文
posted @ 2015-04-16 17:06 wangliyue 阅读(132) 评论(0) 推荐(0) 编辑
摘要:遇到需要多个参数(参数可分为必需参数和非必需参数)才能实例化一个类的对象时,一般有三种方法:1.重叠构造器 重叠构造器的方式可行,但是当有许多参数的时候,客户端的代码会很难编写,而且很容器出错。 方便期间,假设这个类有五个Field需要赋值:2.JavaBean式的类 通过setter方法来为实例对... 阅读全文
posted @ 2015-04-13 17:23 wangliyue 阅读(121) 评论(0) 推荐(0) 编辑
摘要:使用静态工厂方法代替构造器的几大优势:静态工厂方法具有名称。 可以通过它的名称来判断它返回的实例的大概信息。不必再每次调用时都创建一个新的实例。 例如单例类就使用了静态工厂方法。静态工厂方法可以返回原返回类型的任何子类型的对象实例。 如返回类型是Service,可以返回Service类型的任何子类... 阅读全文
posted @ 2015-04-13 15:19 wangliyue 阅读(161) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示