一刷 6000 冊 (2003/09)  

《Practical Java》
中文版 (簡體)

侯捷 / 劉永丹 譯

practical-java-gb.jpg (70470 bytes)

本書範例  PraticalJavaCode.zip

簡體中文版勘誤


譯序如下。其他信息請參考繁體版說明

開放檔案如下:

檔名 內容 大小 bytes
practical-java-gb-chap1-3.pdf

不需密碼即可開啟。
檔案含簡略書籤(目錄連結)

以上所開放,不同於紙本出版品,是指以繁體版為本,轉換為大陸術語後的版本,仍以繁體中文表現。

扉頁、譯序、目錄、細目、前言、致謝、1-3章  
PraticalJavaCode.zip 本書範例源碼
(原作者提供)
139,288

不需密碼即可開啟。檔案不含書籤(目錄連結)

如欲下載,請將滑鼠移至上述 hyperlink,按右鍵,再選【另存目標...】即可。

 

譯序
by 侯捷

面對Java,可從兩方面看待,一是語言,一是平台。本書談的是Java語言,以下我所言種種,也是指Java語言。

Java是一門優秀的面向對象編程語言(Object Oriented Programming Language, OOPL)。什麼是「面向對象」?如何才稱得上「優秀」?前者可定量定性,客觀;後者往往流於個人感受,主觀!所以雖然面向對象語言有著幾近一致的條件和門檻(註1(封裝、繼承、多態),孰優孰劣卻是各人心中一把尺。儘管如此,無人可以否認Java語言在OOP(面向對象編程)上擁有良好的特性和優越的表現。

註1:我常憶起網絡論壇上時可與聞的一種怪誕態度。有一派人士主張,OO是一種思想,一種思考模式,任何語言都能夠實現它,因而侈言「C或assembly語言也能OO」。任何語言各有用途,這是完全正確的;OO是一種思維,這話也是對的。任何語言都能夠實現OO,這話對某些人也許是對的,對99.9999%的人是錯的。以non-OO語言實現OO思維,非但達成度極低,也非人人能為。Edmund Hillary(艾德蒙 希拉瑞)能達到的高度,你未必達得到 — 事實上你通常達不到。(註:Edmund Hillary是第一位登上聖母鋒的地球人,1953年英格蘭遠征隊員。)

我所謂良好的OOP特性,指的是Java提供了許多讓程序員得以輕鬆表達面向對象技術與思維的語言關鍵字(keywords)如class, abstract, interface, extends, implements, public, protected, private, final, static, finalize…,又提供條理清晰結構分明的文件組織方式如package, import,又擁有嚴謹而靈活的動態型別系統(dynamic type system)使得以提供RTTIReflection機制,並擁有一個優秀、涵蓋面廣、擴充性強的標準程序庫(Java Libraries)。

這些優秀的語言構件(constructs)雖然好用易用,但不論就技術面或應用面或性能考量,還是有許多隱微細節散佈其中,例如object creation, object initialization, Cloneable, Serializable, Equality, Immutability, Multithreading (Synchronization), Exception Handling…,在在需要Java程序員深入認識與理解。

市面上Java書籍極多,專注於「編程主題式探討」並「以獨立條款呈現」的書籍比較少。這類書籍面向中高階讀者,不僅選題必須饒富價值、探討必須極為深刻,各主題最好還獨立以利選擇閱讀,卻又最好彼此前後呼應環環相扣,並附良好交叉索引,予讀者柳暗花明的強烈衝擊。此種「專題條款」式的表現風格,在Scott Meyers的《Effective C++》和《More Effective C++》二書面世之後獲得許多讚揚,也引來許多追隨。

Practical Java》和《Effective Java》二書,對前述重要而基礎的技術細微處有著詳盡、深刻、實用的介紹和剖析和範例,又以獨立條款之姿展現,在內容的紮實度、可讀性、易讀性上表現均十分良好。為此,秉持並承繼我為C++ 社區翻譯《Effective C++》、《More Effective C++》的態度和機緣,我很開心再次由我負責,將《Practical Java》和《Effective Java》二書中譯本呈獻給Java 社區。

考慮本書讀者應已具備Java編程基礎,對於各種英文術語已有良好的接受度,我在書中保留了許多英文術語,時而中英並陳,包括class, object, interface, reference, instance, array, vector, stack, heap…,也包括涉及Java關鍵字的一些用語如private, public, protected, static, abstract…,不勝枚舉(下頁另有一個扼要說明)。本書努力在字型變化上突顯不同類形的術語,以利讀者閱讀。本書支持網站有一個「術語  英中繁簡」對照表,歡迎訪問,網址如下。

Practical Java》由劉永丹先生和我合力完成。永丹做前期初譯工作,我負責後繼的文字修潤、技術檢閱、大局風貌。永丹技術紮實,文字用心。沒有他的協助,本書不可能在這個時間以這樣的質量面世。謝謝永丹。

本書每一章起始處都有作者匠心獨具收集的一些文摘語錄。我們雖勉力譯出,恐見識不足,貽笑大方,故均留下原文和出處,庶幾不誤讀者。

侯捷 2003/07/08 于臺灣.新竹

jjhou@jjhou.com(電子郵箱)
http://www.jjhou.com(繁體)(術語對照表http://www.jjhou.com/terms.htm
http://jjhou.csdn.net(簡體) (術語對照表http:// jjhou.csdn.net/terms.htm

p.s. 本書已就英文版截至2003/07/08之勘誤表修正於紙本。

■ 本書術語翻譯與保留之大致原則:

廣被大眾接受之術語,無需額外說明,不在此列。例如繼承(inheritance)、封裝(encapsulation)、多態(polymorphism)。

本書保留與Java關鍵字相關之術語不譯,例如class, interface, private, public, protected, static, final, abstract, synchronized, serializable…

本書保留數據結構名稱不譯,例如array, vector, list, map, set, stack, heap…"collection" 譯為「群集」。

"class" 及其所衍生之各種名詞如subclass, superclass, immutable class, mutable class, base class, derived class等皆保留不譯(時而英中並陳)。"object" 大多數時候譯為「對象」,時而保留。"object reference" 保留不譯,"reference" 亦不譯。

"type" 譯為「型別」。"parameter" 譯為「參數」,"argument" 譯為「引數」。"delegate", "delegation" 譯為「委託」,"aggregate", "aggregation" 譯為「聚合」。"composition" 譯為「複合」。

動詞 "create" 譯為「創建」或「建立」,描述物件之初次誕生。動詞 "refer" 譯為「指涉」或「指向」或「引用」。動詞 "dereference" 譯為「提領」。動詞 "override" 譯為「覆寫」。動詞 "overload" 譯為「重載」。

本書將Java class "methods" 譯為函數,因為它等價於其他編程語言之 "function"。若直譯為「方法」,行文缺乏術語突出感,恐影響閱讀流暢;若不譯,過於頻繁出現又恐影響版面觀感。

本書將Java class "fields" 譯為值域,等價於C++ 語言之 "data member"

本書將 "clone" 譯為「克隆」,映照 "copy" 之於「拷貝」。非單純保留 "clone" 是因為它時常做為動詞並頻繁出現,而我對術語的保留態度是儘量只考慮名詞(偶有形容詞)。

※「static值域與instance值域」、「reference對象與value對象」、「reference型別與primitive型別」等等術語保留部分英文,並使用特殊字型。

本書支持網站有一個「術語英中繁簡」對照表,歡迎訪問,網址見上頁。

術語翻譯有許多兩難之處,祈願讀者體諒;譯者勉力求取各方平衡,並儘可能於突兀處中英並陳。

-- 侯捷