侯 捷
完成942+页的《深入浅出MFC》2/e(著作)和1237+页的《C++ Primer 3e繁体中文版》(译作)之后,我罹患了一种"厚书恐惧症"。原因是大部头书籍的写作和翻译任务异常艰巨,包括材料的选择、术语的一致、英中术语的取舍协调、长时间的工作和期待……凡此种种对作者(或译者)的创作力、组织力、毅力都是一种严苛的考验。
然而《Thinking in Java》2e毕竟不同一般。这本书将在Java programming基础教育上起重要作用。我于是怀着戒慎恐惧(但也开心)的心情再度接下这份重任,以几近一年的时间,在王建兴先生的协助下,完成了这本1127+页大部头书籍的繁体中文版翻译和版面制作。
繁体版即将定稿之际,我接受机械工业出版社华章公司温总编辑的邀请,欣然同意以繁体版为基础,转制简体版,由机械社出版发行。我的许多著译作品都曾经以这种方式在中国大陆发行,因此工作流程之于我并不陌生。基于各种考量,这一次由我亲自转换术语,将繁体版之台湾地区惯用术语改为大陆惯用术语,其他行文尽量维持不动。两岸略显不同的用语习惯,只要是顺畅的,常带给我个人一种新鲜的喜悦,或许您也有相同的胸怀。至于术语的转换,千丝万缕,或有挂一漏万之憾,还请各位读者斧正。
谈谈这本书的内容。Java面向极广,不可能有一本涵盖全貌的书籍(我们也不应该有"一次买足"的心理)。就相对全貌而言,《Thinking in Java》是一本取材广泛表现优异的作品,其最大特色是:(1) 内容涵盖面广,(2) 许多主题(特别是面向对象编程技术)极为深入,广泛而又深刻的论述形成了上千页的篇幅,(3) 英文版由作者Bruce Eckel免费开放,造福很多人,也因而影响了很多人(因此你很容易找到一个可以共同讨论书中观点的朋友)。
本书的优异表现,从读者的热情回应(摘列于书前)可见一斑。乍见之下本书虽然像一本初学教本,而它也的确胜任此一角色,然而本书在不少高阶主题(例如Polymorphism,Object Serialization,Reflection,RTTI,I/O,Collections)上的深入讨论,肯定也能带给许多Java老手新的体会。
本书繁体版延用我个人喜爱的"页页对译"方式,用以和英文版达成直觉的页次对应,并轻松保留书内所有交叉参考(cross reference)和书后完整索引。由于原书字型甚大,页数甚多,基于各种考量,我同意简体版由华章公司重新编排。华章公司编辑群将于重新编排后的版面侧边加注原书页次,如此一来便可继续保持与英文版之直觉对应,又不必劳师动众地重新调整数千条索引(那真是一件纯劳力而又容易出错的无趣工作)。原书索引所列之数千个词条,中文版皆不译,我个人认为值得保留的英文术语亦不译(第一次出现或某个频率下我会让它英中并陈)。之所以保留英文术语,我已多次为文阐述个人想法,文章都公布在侯捷网站上。
做为本书英文版的一个认真读者,我要说,我确实从这本书学习了许多深刻的见解。希望此一中文版能够协助更多人高效、精准、深刻地认识并学习Java。
为了致敬Bruce Eckel开放《Thinking in Java》2e英文版的精神,侯捷网站将开放繁体中文版前9章及4个附录,占全书篇幅1/2。简体版开放篇幅由华章公司决定,由华章公司统筹。
本书所有文字责任与技术责任,都在侯捷一人身上。欢迎讨论,欢迎(并感谢)斧正。所有勘误都将持续而永远地维护,并设法更正于新刷纸本。
侯捷 2002.07.15 台湾·新竹
http://www.jjhou.com (侯捷网站 繁体中文)
http://jjhou.csdn.net (侯捷网站 简体中文)
jjhou@jjhou.com (电子邮箱)
本书勘误表维护于侯捷网站(与繁体版各自独立)。
本书试读期间,曾有读者反应不知如何开始自己的第一个Java程序,因此我加写一段"Java环境设定"放在本书目录之后,告诉您如何下载Java开发工具、如何设定环境、如何编译并执行Java程序。
本书繁体中文版的第一阶段初译工作由王建兴先生负责。建兴未涉简体版大小事务,所以未同列简体版译者。我要藉此处感谢他的贡献。
关于本书术语,请注意:
侯捷网站提供一份计算机术语英中繁简对照(持续完善中),请参考。
Java所谓的method,即C/C++ 的member function。若将method译为"方法",不易于行文之中突显术语的独特性,因此本中文版将method一律改为member function,并译为"成员函数"或"函数"。这种用法在国际间也通行。
. Java所谓的class field,即C/C++ 的data member。由于field一词在其他诸多场合(如数据库及Windows UI组件)也被采用,为避免混淆并求一致,本书将class field一律改为data member,并译为"数据成员"。这种用法在国际间也通行。
本书大部分时候将type译为"型别",而非一般惯用之"类型"。同样是为了术语的突出性。
本书将argument译为"引数",parameter译为"参数"。
Serialization一般在大陆被译为"序列化",在台湾则人言言殊。这个译词容易和其他意义完全不同的术语(sequence、sequential...)混淆。我决定称其为"次第读写",因为serialization的意义就是"将数据依某种次序写入文件"以及"以相同次序将数据从文件中读出"(当然,如果扩充解释,读写对象并非一定得是文件-写入stream或从stream读出也是可以的)。
stream一般被译为"流"。本书使用"串流"一词,因为二字词在多数情境下有较佳的阅读和口语效果。不过如果和"数据"并用成为"数据流",那又另当别论了。大多数时候本书保留stream原词不译。
copy constructor和default constructor一般被译为拷贝构造函数和缺省(默认)构造函数。本书将保留这两个带有特殊意义的原词,并使用特殊字体,称为copy构造函数和default构造函数。