?? 0106.htm
字號:
<html>
<head>
<title>新時代軟件教程:操作系統 主頁制作 服務器 設計軟件 網絡技術 編程語言 文字編輯</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋體}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1 {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>引言</strong></big></p>
<div align="right">---(原著/Bruce Eckel 翻譯/Trans Bot)</div>
<p>同人類任何語言一樣,Java為我們提供了一種表達思想的方式。如操作得當,同其他方式相比,隨著問題變得愈大和愈復雜,這種表達方式的方便性和靈活性會顯露無遺。<br>
不可將Java簡單想象成一系列特性的集合;如孤立地看,有些特性是沒有任何意義的。只有在考慮“設計”、而非考慮簡單的編碼時,才可真正體會到Java的強大。為了按這種方式理解Java,首先必須掌握它與編程的一些基本概念。本書討論了編程問題、它們為何會成為問題以及Java用以解決它們的方法。所以,我對每一章的解釋都建立在如何用語言解決一種特定類型的問題基礎上。按這種方式,我希望引導您一步一步地進入Java的世界,使其最終成為您最自然的一種語言。<br>
貫穿本書,我試圖在您的大腦里建立一個模型——或者說一個“知識結構”。這樣可加深對語言的理解。若遇到難解之處,應學會把它填入這個模型的對應地方,然后自行演繹出答案。事實上,學習任何語言時,腦海里有一個現成的知識結構往往會起到事半功倍的效果。<br>
<br>
1. 前提<br>
本書假定讀者對編程多少有些熟悉。應已知道程序是一系列語句的集合,知道子程序/函數/宏是什么,知道象“If”這樣的控制語句,也知道象“while”這樣的循環結構。注意這些東西在大量語言里都是類似的。假如您學過一種宏語言,或者用過Perl之類的工具,那么它們的基本概念并無什么區別。總之,只要能習慣基本的編程概念,就可順利閱讀本書。當然,C/C++程序員在閱讀時能占到更多的便宜。但即使不熟悉C,一樣不要把自己排除在外(盡管以后的學習要付出更大的努力)。我會講述面向對象編程的概念,以及Java的基本控制機制,所以不用擔心自己會打不好基礎。況且,您需要學習的第一類知識就會涉及到基本的流程控制語句。<br>
盡管經常都會談及C和C++語言的一些特性,但并沒有打算使它們成為內部參考,而是想幫助所有程序員都能正確地看待那兩種語言。畢竟,Java是從它們那里衍生出來的。我將試著盡可能地簡化這些引用和參考,并合理地解釋一名非C/C++程序員通常不太熟悉的內容。<br>
<br>
2. Java的學習<br>
在我第一本書《Using C++》面市的幾乎同一時間(Osborne/McGraw-Hill于1989年出版),我開始教授那種語言。程序設計語言的教授已成為我的專業。自1989年以來,我便在世界各地見過許多昏昏欲睡、滿臉茫然以及困惑不解的面容。開始在室內面向較少的一組人授課以后,我從作業中發現了一些特別的問題。即使那些上課面帶會心的微笑或者頻頻點頭的學生,對許多問題也存在認識上的混淆。在過去幾年間的“軟件開發會議”上,由我主持C++分組討論會(現在變成了Java討論會)。有的演講人試圖在很短的時間內向聽眾灌輸過多的主題。所以到最后,盡管聽眾的水平都還可以,而且提供的材料也很充足,但仍然損失了一部分聽眾。這可能是由于問得太多了,但由于我是那些采取傳統授課方式的人之一,所以很想使每個人都能跟上講課進度。<br>
有段時間,我編制了大量教學簡報。經過不斷的試驗和修訂(或稱“反復”,這是在Java程序設計中非常有用的一項技術),最后成功地在一門課程中集成了從我的教學經驗中總結出來的所有東西——我在很長一段時間里都在使用。其中由一系列離散的、易于消化的小步驟組成,而且每個小課程結束后都有一些適當的練習。我目前已在Java公開研討會上公布了這一課程,大家可到http://www.BruceEckel.com了解詳情(對研討會的介紹也以CD-ROM的形式提供,具體信息可在同樣的Web站點找到)。<br>
從每一次研討會收到的反饋都幫助我修改及重新制訂學習材料的重心,直到我最后認為它成為一個完善的教學載體為止。但本書并非僅僅是一本教科書——我嘗試在其中裝入盡可能多的信息,并按照主題進行了有序的分類。無論如何,這本書的主要宗旨是為那些獨立學習的人士服務,他們正準備深入一門新的程序設計語言,而沒有太大的可能參加此類專業研討會。<br>
<br>
3. 目標<br>
就象我的前一本書《Thinking in C++》一樣,這本書面向語言的教授進行了良好的結構與組織。特別地,我的目標是建立一套有序的機制,可幫助我在自己的研討會上更好地進行語言教學。在我思考書中的一章時,實際上是在想如何教好一堂課。我的目標是得到一系列規模適中的教學模塊,可以在合理的時間內教完。隨后是一些精心挑選的練習,可以在課堂上當即完成。<br>
在這本書中,我想達到的目標總結如下:<br>
(1)
每一次都將教學內容向前推進一小步,便于讀者在繼續后面的學習前消化前面的內容。<br>
(2)
采用的示例盡可能簡短。當然,這樣做有時會妨礙我解決“現實世界”的問題。但我同時也發現對那些新手來說,如果他們能理解每一個細節,那么一般會產生更大的學習興趣。而假如他們一開始就被要解決的問題的深度和廣度所震驚,那么一般都不會收到很好的學習效果。另外在實際教學過程中,對能夠摘錄的代碼數量是有嚴重限制的。另一方面,這樣做無疑會有些人會批評我采用了“不真實的例子”,但只要能起到良好的效果,我寧愿接受這一指責。<br>
(3)
要揭示的特性按照我精心挑選的順序依次出場,而且盡可能符合讀者的思想歷程。當然,我不可能永遠都做到這一點;在那些情況下,會給出一段簡要的聲明,指出這個問題。<br>
(4)
只把我認為有助于理解語言的東西介紹給讀者,而不是把我知道的一切東西都抖出來,這并非藏私。我認為信息的重要程度是存在一個合理的層次的。有些情況是95%的程序員都永遠不必了解的。如強行學習,只會干擾他們的正常思維,從而加深語言在他們面前表現出來的難度。以C語言為例,假如你能記住運算符優先次序表(我從來記不住),那么就可以寫出更“聰明”的代碼。但再深入想一層,那也會使代碼的讀者/維護者感到困擾。所以忘了那些次序吧,在拿不準的時候加上括號即可。<br>
(5)
每一節都有明確的學習重點,所以教學時間(以及練習的間隔時間)非常短。這樣做不僅能保持讀者思想的活躍,也能使問題更容易理解,對自己的學習產生更大的信心。<br>
(6)
提供一個堅實的基礎,使讀者能充分理解問題,以便更容易轉向一些更加困難的課程和書籍。<br>
<br>
4. 聯機文檔<br>
由Sun微系統公司提供的Java語言和庫(可免費下載)配套提供了電子版的用戶幫助手冊,可用Web瀏覽器閱讀。此外,由其他廠商開發的幾乎所有類似產品都有一套等價的文檔系統。而目前出版的與Java有關的幾乎所有書籍都重復了這份文檔。所以你要么已經擁有了它,要么需要下載。所以除非特別必要,否則本書不會重復那份文檔的內容。因為一般地說,用Web瀏覽器查找與類有關的資料比在書中查找方便得多(電子版的東西更新也快)。只有在需要對文檔進行補充,以便你能理解一個特定的例子時,本書才會提供有關類的一些附加說明。<br>
<br>
5. 章節<br>
本書在設計時認真考慮了人們學習Java語言的方式。在我授課時,學生們的反映有效地幫助了我認識哪些部分是比較困難的,需特別加以留意。我也曾經一次講述了太多的問題,但得到的教訓是:假如包括了大量新特性,就需要對它們全部作出解釋,而這特別容易加深學生們的混淆。因此,我進行了大量努力,使這本書一次盡可能地少涉及一些問題。<br>
所以,我在書中的目標是讓每一章都講述一種語言特性,或者只講述少數幾個相互關聯的特性。這樣一來,讀者在轉向下一主題時,就能更容易地消化前面學到的知識。<br>
下面列出對本書各章的一個簡要說明,它們與我實際進行的課堂教學是對應的。<br>
<br>
(1) 第1章:對象入門<br>
這一章是對面向對象的程序設計(OOP)的一個綜述,其中包括對“什么是對象”之類的基本問題的回答,并講述了接口與實現、抽象與封裝、消息與函數、繼承與合成以及非常重要的多形性的概念。這一章會向大家提出一些對象創建的基本問題,比如構建器、對象存在于何處、創建好后把它們置于什么地方以及魔術般的垃圾收集器(能夠清除不再需要的對象)。要介紹的另一些問題還包括通過違例實現的錯誤控制機制、反應靈敏的用戶界面的多線程處理以及連網和因特網等等。大家也會從中了解到是什么使得Java如此特別,它為什么取得了這么大的成功,以及與面向對象的分析與設計有關的問題。<br>
<br>
(2) 第2章:一切都是對象<br>
本章將大家帶到可以著手寫自己的第一個Java程序的地方,所以必須對一些基本概念作出解釋,其中包括對象“句柄”的概念;怎樣創建一個對象;對基本數據類型和數組的一個介紹;作用域以及垃圾收集器清除對象的方式;如何將Java中的所有東西都歸為一種新數據類型(類),以及如何創建自己的類;函數、自變量以及返回值;名字的可見度以及使用來自其他庫的組件;static關鍵字;注釋和嵌入文檔等等。<br>
<br>
(3) 第3章:控制程序流程<br>
本章開始介紹起源于C和C++,由Java繼承的所有運算符。除此以外,還要學習運算符一些不易使人注意的問題,以及涉及造型、升遷以及優先次序的問題。隨后要講述的是基本的流程控制以及選擇運算,這些是幾乎所有程序設計語言都具有的特性:用if-else實現選擇;用for和while實現循環;用break和continue以及Java的標簽式break和contiune(它們被認為是Java中“不見的gogo”)退出循環;以及用switch實現另一種形式的選擇。盡管這些與C和C++中見到的有一定的共通性,但多少存在一些區別。除此以外,所有示例都是完整的Java示例,能使大家很快地熟悉Java的外觀。<br>
<br>
(4) 第4章:初始化和清除<br>
本章開始介紹構建器,它的作用是擔保初始化的正確實現。對構建器的定義要涉及函數過載的概念(因為可能同時有幾個構建器)。隨后要討論的是清除過程,它并非肯定如想象的那么簡單。用完一個對象后,通常可以不必管它,垃圾收集器會自動介入,釋放由它占據的內存。這里詳細探討了垃圾收集器以及它的一些特點。在這一章的最后,我們將更貼近地觀察初始化過程:自動成員初始化、指定成員初始化、初始化的順序、static(靜態)初始化以及數組初始化等等。<br>
<br>
(5) 第5章:隱藏實現過程<br>
本章要探討將代碼封裝到一起的方式,以及在庫的其他部分隱藏時,為什么仍有一部分處于暴露狀態。首先要討論的是package和import關鍵字,它們的作用是進行文件級的封裝(打包)操作,并允許我們構建由類構成的庫(類庫)。此時也會談到目錄路徑和文件名的問題。本章剩下的部分將討論public,private以及protected三個關鍵字、“友好”訪問的概念以及各種場合下不同訪問控制級的意義。<br>
<br>
(6) 第6章:類再生<br>
繼承的概念是幾乎所有OOP語言中都占有重要的地位。它是對現有類加以利用,并為其添加新功能的一種有效途徑(同時可以修改它,這是第7章的主題)。通過繼承來重復使用原有的代碼時(再生),一般需要保持“基礎類”不變,只是將這兒或那兒的東西串聯起來,以達到預期的效果。然而,繼承并不是在現有類基礎上制造新類的唯一手段。通過“合成”,亦可將一個對象嵌入新類。在這一章中,大家將學習在Java中重復使用代碼的這兩種方法,以及具體如何運用。<br>
<br>
(7) 第7章:多形性<br>
若由你自己來干,可能要花9個月的時間才能發現和理解多形性的問題,這一特性實際是OOP一個重要的基礎。通過一些小的、簡單的例子,讀者可知道如何通過繼承來創建一系列類型,并通過它們共有的基礎類對那個系列中的對象進行操作。通過Java的多形性概念,同一系列中的所有對象都具有了共通性。這意味著我們編寫的代碼不必再依賴特定的類型信息。這使程序更易擴展,包容力也更強。由此,程序的構建和代碼的維護可以變得更方便,付出的代價也會更低。此外,Java還通過“接口”提供了設置再生關系的第三種途徑。這兒所謂的“接口”是對對象物理“接口”一種純粹的抽象。一旦理解了多形性的概念,接口的含義就很容易解釋了。本章也向大家介紹了Java
1.1的“內部類”。<br>
<br>
(8) 第8章:對象的容納<br>
對一個非常簡單的程序來說,它可能只擁有一個固定數量的對象,而且對象的“生存時間”或者“存在時間”是已知的。但是通常,我們的程序會在不定的時間創建新對象,只有在程序運行時才可了解到它們的詳情。此外,除非進入運行期,否則無法知道所需對象的數量,甚至無法得知它們確切的類型。為解決這個常見的程序設計問題,我們需要擁有一種能力,可在任何時間、任何地點創建任何數量的對象。本章的宗旨便是探討在使用對象的同時用來容納它們的一些Java工具:從簡單的數組到復雜的集合(數據結構),如Vector和Hashtable等。最后,我們還會深入討論新型和改進過的Java
1.2集合庫。<br>
<br>
(9) 第9章:違例差錯控制<br>
Java最基本的設計宗旨之一便是組織錯誤的代碼不會真的運行起來。編譯器會盡可能捕獲問題。但某些情況下,除非進入運行期,否則問題是不會被發現的。這些問題要么屬于編程錯誤,要么則是一些自然的出錯狀況,它們只有在作為程序正常運行的一部分時才會成立。Java為此提供了“違例控制”機制,用于控制程序運行時產生的一切問題。這一章將解釋try、catch、throw、throws以及finally等關鍵字在Java中的工作原理。并講述什么時候應當“擲”出違例,以及在捕獲到違例后該采取什么操作。此外,大家還會學習Java的一些標準違例,如何構建自己的違例,違例發生在構建器中怎么辦,以及違例控制器如何定位等等。<br>
<br>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -