《Java 编程思想》2/e 简体勘误 :: freedom2
来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=9733 存档链接: https://web.archive.org/web/20041210121003id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=9733
freedom2-自由天空-闲人的日记
[b]呼吸一下新鲜空气吧[/b]
|
首页
|
一步一步用Delphi6实现Web Service>>>
《Java 编程思想》2/e 简体勘误
时间:2003-06-03
《Java 编程思想》2/e 简体勘误
Tue Jun 3 12:08:20 2003
本勘误档更新日期: 2003/03/27
《Java 编程思想》2/e 简体
机械出版社 华章公司 出版, 2002/09
目前刷次: 2002/09 第一刷 印量 0000110000
2002/12 第二刷 印量 1000123000
2003/05 第三刷 印量 23001~31000
原着:Thinking in Java 2e,
by Eckel Bruce
Prentice Hall, 2000
请注意:以下各项修正皆以日期排序
书籍内容更正,有两种作法,一是在网际网路上做个专属勘误 网页,让大家上去看。这是比较即时的作法。而更理想更负责 的作法是:不但有勘误网页,并且在新刷中予以更正 -- 如果 有新刷的话。 不过,理想与现实之间需要一点协调。书籍的制作是这样的, 制版与印刷时,是以台(8 或 16 页)为单位。因此,每换一 页,同台的各页统统要换过。这便造成印制成本的大量增加。 以前,我从不考虑成本,只要我认为书籍内容有修改必要,即 使只是某个字词用得不甚理想,我都会请出版社更新。出版社 也都全力配合(这一点让我非常感谢)。 慢慢地,我的行事不再这麽霹雳,我觉得我多少也要站在出版 社的立场想想。所以我打算,如果是关系到对错正误的根本性 问题,我便一定在新刷修正。如果是易判别的错别字或排版误 失或用词不很恰当┅等等,我便先在勘误网页上明载,但不求 立刻於新刷中更正。直到收集来的这类误失较为密集了,才一 并於下一刷修正。 哪些是新刷已修正的,哪些是暂请读者自行动手更改的,我会 在勘误网页(网址见书封底)上很清楚地说明。 这是个便宜法门,请读者见谅。 书籍应该在出版前就详细检查,以完美之姿出现。但是完美很 难达到。对於下列大大小小轻重不等的误失,我谨向读者说抱 歉。 本档欢迎广为流传,谢谢。 以下为更新记录。如果您购买的是第 n 刷,请将以下第 n+1 刷之後的更新内容自行修正至书上。谢谢
以下已於第二刷更正完毕 (注意,Lm 表示第 m 行,L-n 表示倒数第 n 行) ■序言p3, L24(错字) 原文:同样的,「设计样式(Design Patters)」 修改:同样的,「设计样式(Design Patterns)」 感谢:gigix 日期:2002/09/16 ■p100,L-16(中文版处理错误) 原文:紧接於其後的表达式则使用逻辑运算符来产生... 修改:紧接於其後的表达式则使用关系比较式(relational comparisons)来产生... 感谢:施正桓 日期:2002/09/19 ■p110,L-8(笔误) 原文:FORTAN 是个全面使用大写字母的语言... 修改:FORTRAN 是个全面使用大写字母的语言... 感谢:dbai 日期:2002/09/19 ■p217,L12(处理错误) 原文:将其「对象生成空间」注解掉 修改:将其「对象生成动作」注解掉 感谢:annhy 日期:2002/09/20 ■p195,L8(译笔不佳,原书文字亦不佳。现按技术意义重译) 原文: 注意,Bath 构造函数中,有一行语句在任何初始化动作之前执行。如果你未 在定义处进行初始化,那麽就无法保证在你发送消息给 object references 之前能够进行任何初始化 ─ 反倒是无可避免会发生执行期异常。 修改: 注意 Bath 构造函数中有一行语句在所有初始化动作之前执行。如果你未曾 在数据成员定义处初始化 object references,便无法保证它们在接受消息 之前已完成初始化 ─ 果真如此便会发生执行期异常。 感谢:annhy 日期:2002/09/20 ■p203,L-18(原译不佳。重译) 原文: 那麽在 derived class 中重新定义此一函数,并不会遮蔽它在 base class 中 的任何版本。因此,不论该层 class 或 base class 是否定义了这个函数, 都会发挥重载作用 修改: 那麽在 derived class 中重新定义(使用)此一函数名称,并不会遮蔽它在 base class 中 的任何版本。因此,函数不论被定义於某层 class 或其 base class,重载机制都可正常运作 感谢:annhy 日期:2002/09/20 ■p193,第一段文字第一行(讨论) 原文: 每个非基本型别的物件都具备 toString(),当编译器希望得到一个 String,而你手上却只有那些对象的情况下,这个函数便会被唤起。 讨论 by annhy: 到底在哪种情况下这个函数会自动被唤起?想来想去好像还是只有 "字符串加法" 啊!! 我写了一个小程式来测试: public class A { public String toString() { return "A"; } static void pStr(String str) { System.out.println("pStr: " + str); } static void pObj(Object obj) { System.out.println("pObj: " + obj); } public static void main(String[] args) { A a = new A(); pObj(a); // pObj() 内有字符串加法 //! pStr(a); // pStr() 需要 String,但也不会自动呼叫 toString() //! pStr((String)a); // 将 A 转型为 String 是不合法的 pStr(a.toString()); // 自行呼叫 toString(),可以 pStr(a + "" ; // 经过 "字符串加法" 也可以 //! pStr(a + 1); // 经过 "数值加法" 就不行 } } 另外在 JSP 中的写法 <%=objectReference%> 也可以自动呼叫 toString()。 不过这大概是个可以接受 Object 型别的函数,而内部会呼叫 toString() 吧。 测试例如下: <%@ page contentType="text/html; charset=gb2312" %>