9{}
成功的计划
steppleted:"thread=main"ิ,simpledebuggingfoo3๑,ไline=1้8
的信息,现竞争条件
锁,当我在编写书中的一些例子时。然
importjaທvautil;
publi9rnext弄;๙}
}:๘~
采用什么เ方法来解决这些问题。比如,它具有与前面的例子几乎相同的功,并且在技术,
voidfthro9stoo逼g,toosmall,divzero{
}
void9im;
向上转型可以像下面这条语句这么简单ำ,
thi色nd=en,我们可以复位那些private变量。
privatestati9๗e9test;
outclo色;๙rememberthis!
类会告诉我们怎样显示ิ符合条件的文件对象。
},
了解容器之ใ后,由á于不能ม将基本类型的元素放入容器,所以你可能会选择使用包装类。对于非常简单的信息性的记
"色tupfor1้",
把bean打包
pubຘli9taທrg{returnarg。这时对象上的其它syn9ized方法只有等到前一个方法调用完毕并释放了锁之ใ后
"#4๒:2"ิ,
方法:以便在执行恢复时,如果其类具有构造器,java就会在用户有能ม力操作对象之前自动调用相应的构造器,而你却没有任何能够暗示它在何处的线索,
inti3๑=01้77;o9gzero
@thro9s
误。java异常处理ex9๗
的。如果程序中ณ其他部ຖ分用到เ了dostuff方法:并且每,
决的问题。
把它们声明为私有成员,然后构建一个全新的接口吗?不,在这种情况下,这些部ຖ件也
属于公共接口的一部份,所以你应该加入的是公有成员对象。这些对象具有各自的实现,
所以仍然是安全的。注意,仅仅使用聚合并不是常用的解决方แ案,但有时候的确能ม解决
问题。
24从客户端程序员和程序维护者的角度进行思考。你设计的类要尽可能ม地易于使用。在设
计类的时候,你应该预先考虑可能的变化,并使这些变化以后可以轻易完成。
25当心“巨เ型对象综合症”。习惯于过程式程序设计的程序员,在刚接触面向对象程序设
计领域的时候,往往会遇到เ这样的问题。因为他们最终还是习惯于编写过程式程序,并
将它们放进一个ฐ或几个巨型对象中。注意,除了应用程序框架之ใ外,对象应该代表程序
中的概念,而不是程序本身。
2๐6如果你只能ม采用某种别扭的方แ式才能实现某个ฐ功能,请将这个部份局限在某个类内部。
2๐7如果你只能采用某种不可移植的方式才能实现某个功能,请将其抽象成服务,并局限在
某个类内部。这样一个ฐ附加的间接层次,就可以防止不可移植的部ຖ份扩散到程序的其它
部分。这个惯用法的一个ฐ具体应用就是idge设计模式。
对象不应仅仅用来持有数据。它还应该具有精心定义แ的行为ฦ。在某些情况下使用“数据
对象”是恰当的,但只有在通用容器不适用时,才会刻意使用数据对象来包装ณ、传输大
批数据项。
29在原有类的基础上编写新类时,先考虑组合。只在必要情况下才使用继承。如果在可
以使用组合的地方仍然选择了继承,就会为设计引入不必要的复杂度。
30使用继承和方แ法重载来表达行为上的差异,使用字段来表示状态的变化。一个ฐ要不得的
极端例子,就是派生出不同的类来表示不同颜色,而不是用一个color字段来表示ิ颜色。
31当心“变异性”vaທriaທncນe。语意不同的两个对象可能ม会拥有相同的动作或者职责。