前言如今,Java非常適合選擇作為介紹性編程的課程。其理由很多:互聯(lián)網的使用持續(xù)爆炸性地增長;面向Web應用的程序已成為軟件的主流,而Java正是為互聯(lián)網編程的語言;Java還提供了成熟的軟件開發(fā)工具、以及大量包括多線程和高級圖形用戶界面在內的各種應用程序的開發(fā)包;而體系結構中立的設計使Java具有很好的可移植性。近年來,安全與可靠的重要性有了新的意義,Java對安全與可靠的支持與其自身的設計融為一體。面向對象使Java成為現(xiàn)代軟件工程和編程概念的良好教學載體。背景從20世紀90年代早期以來,在國家科學基金會(NationalScienceFoundation)的大力支持下,本系(弗吉尼亞大學計算機科學系——譯者注)發(fā)展、提煉并擴展了新的計算機科學的課程。在考察本課程與同類學校的課程的過程中,經常使用的一些重要原則是:*使用一種課堂以外被廣泛接受的編程語言。*使用現(xiàn)代軟件開發(fā)工具。*鼓勵團隊合作。*按照軟件工程原則開發(fā)系統(tǒng)。*鼓勵重用現(xiàn)有的庫和工具。*用圖形用戶界面實現(xiàn)軟件的輸入、輸出。*選用適合各種聽眾的教學法和例子。本書的內容及其補充材料都用來支持這些原則的發(fā)展。計算機科學中的許多重要概念和問題,在很好地理解什么是程序以及如何寫程序之前,不會被賞識。遺憾的是,學會編程很困難。如同要寫好文章一樣,好的編程需要多年的實踐。教授編程在很多方面與教授寫作相似。在學習寫作的過程中,學生通過閱讀好散文的范例,反復地練習寫作,學習怎樣組織構思,以實現(xiàn)最有效的表達。學生從寫作、編輯一兩個段落開始,直到能寫出很長的文章,如散文、短故事和報告。學生們的寫作技能也隨著不斷地增長。教授程序設計的方法與教授寫作類似。貫穿本書,介紹并討論了很多好的和不好的例子,自我檢測和程序練習,給學生提供了設計、組織和編寫代碼的練習機會。另外,還提供了幫助學習修改代碼這個實用技能的例子,這部分通過專供學生修改的代碼來實現(xiàn)。這種方法很有效,因為,這樣能迫使學生成為積極的參與者,即學生一定要去閱讀并理解所提供的代碼。為支持這一努力,本書所使用代碼的電子版在本書的網站上可以找到。本書的目的本書的目標是成為學生的第一門編程課程,而且適合于各種不同學科的人。本書假定讀者以前沒有編程技能,要求的數(shù)學和科學知識,相當于大學一年級學生的水平。本書的主要目的是:*向學生介紹Java編程語言;*展示和鼓勵使用面向對象范例;*有效地解決問題的技術示范;*使學生從事現(xiàn)實世界中的例子;*教給學生軟件工程設計的概念;*向學生介紹Java的核心類庫和圖形庫;*給學生組織和編寫代碼的實踐;*傳授學生修改現(xiàn)有代碼的實際技能;*給出好的,以及不好的編程指導性例子;*提供測試和調試的有效內容。本書的特點及其原因本書深入覆蓋了介紹性課程應有的全部資料,還介紹了許多通常包含在后續(xù)課程中的資料,并對余下的問題指出要點。章節(jié)的篇幅和安排提供了教師講解內容和時間安排上的靈活性。章節(jié)的內容和擴展的附錄使有能力的讀者可以更上一層樓,并把本書當作一個有價值的參考資源。本書的一些特點如下所述。*詳細介紹面向對象的概念:本書實施了“適時對象”方法。在過去的十多年里,作者把面向對象的范例用于介紹性的課程,已經證明Java可以成功地介紹給初學編程的人。并了解到,將自定義的類推遲到課程末尾,會限制學生掌握面向對象的編程范例的核心知識,會對面向對象編程的其他重要原則形成膚淺的認識。因此,本書很早就介紹了對象表示方法。使學生們從一開始就可使用標準包中的對象,很快對一些有興趣的問題開發(fā)出有意義的程序。在堅固基礎的介紹后,提出了基本類和面向對象設計。在探索控制結構之后,對方法、類和面向對象設計進行了更深一步的介紹。*注重解決問題能力:許多初學者面臨的最大障礙,是不知道解決問題的基本方法。對于這個問題,本書在第1章介紹了解決問題的基本技能,在以后的每一章里,把一些新概念用于滿足不同讀者要求而選擇的問題中。學生們先學習這些有效解決問題的例子,然后再提供給他們獨自解決類似問題的機會。*介紹軟件工程設計的概念:本書通過對問題的研究和軟件項目來介紹軟件工程設計的概念。除了大量的小例子外,每一章都對一個或多個問題的細節(jié)進行考慮。在某種程度上,都有面向對象的分析和設計,以及實現(xiàn)設計算法的開發(fā)。*測試和調試的內容:程序員的一項重要技能,是對自己設計和實現(xiàn)的程序如何進行測試和調試。第13章介紹了測試和調試方面重要的軟件工程概念和實踐。這一章討論的測試技術,如單元測試、整體測試和代碼檢查。調試的一節(jié),注重教會學生怎樣用科學方法去找出錯誤。該章還討論了初學者常犯的錯誤和怎樣識別它們。在介紹了控制結構之后,此章的內容可以在授課教師認為合適的時候講解。*生動的實例:學生們喜歡從真實生活中遇到的有趣情況來學習,多元化的研究和編程方案來源于不同的主題,包括:身體鍛煉、兜售信息、醫(yī)療診斷、統(tǒng)計分析、性格類型分析、數(shù)據(jù)可視化、圖形、娛樂和動畫。通過這些不同的例子,本書展示了程序員可以怎樣參與日常生活并為之做出貢獻。*只用標準Java類:本書在介紹Java編程概念時,只使用標準的Java類。特別沒有用外界購入或由作者自己寫的類。選用標準的類和技術,這樣做,使初學者容易理解。*實驗室手冊:在介紹性課程中,對采用實驗室教學的學校,本書配有打印好的實驗室手冊。實驗室資料提供了動手的經驗,以強化Java編程的概念和技能。需要實驗手冊的讀者請與McGraw-Hill出版社的當?shù)卮硖幝?lián)系。*編程和風格的技巧:除了解釋Java和面向對象編程,本書還對怎樣成為一個更好、更有見地的程序員和設計者提出了忠告。在諸如避免常見的編程錯誤、寫可讀性好的代碼以及遵循軟件工程原則等方面,有一些很重要的技巧。*自測題、練習題和軟件方案:每章都提供帶有答案的自測題,以便學生能評價自己對重要概念的技能掌握。本書還提供了數(shù)百道練習題,授課教師可以通過出版社得到項目。在第1章Java的基本概念介紹之后,第2章和后續(xù)的每章都提供了編程方案,來練習本章的概念。*參考附錄:附錄C、D和E提供近兩百頁對標準JavaAPI的描述,這使得本書在課程結束后,可以成為一個手頭的參考手冊。章節(jié)概述和特點引言每章的開始都有一個簡短介紹,以引起學生的注意,并為本章的內容做好準備。既強調主題的現(xiàn)時重要性,也強調每章主題在更廣泛的編程上下文中的地位。目標介紹之后,有一個本章目標的列表,給學生提供了一套明確的學習目標。這一列表,使學生在學習本章內容時,可用來衡量自己的進展,也可在學習章節(jié)結束時,用來評價自己理解的程度。還可作為授課教師準備考試和小測驗的指導。圖標和信息欄圖標和帶陰影的信息欄顯示了警告、風格技巧、推薦閱讀材料和屬于Java語言本身的信息。表明關于編程的警告,通常是怎樣避免常見編程錯誤的竅門。表明與編程風格有關的資料。表明與Java程序語言有關的資料。表明編程竅門,或更具體的討論資料,或現(xiàn)有論題的補充。代碼格式化特殊格式的代碼清單,使代碼部分易于查找和參考。每一個完整的清單是按照所在章節(jié)中的位置編序。代碼段與周圍的文字清晰地分開,而且有很容易識別的作者注釋。UML圖用UML圖幫助闡明類之間的關系,同時,也使學生熟悉這個廣泛應用的符號系統(tǒng)。案例學習每章都有多個案例學習,用來講解有效解決問題的技能,強化面向對象編程和軟件工程設計概念。每個案例學習的開始,都突出明確的學習目標,并用特殊的圖標強調解決問題的步驟。案例學習的講解可以選擇,只應用本章的概念,而不介紹新概念。章節(jié)評論每章結尾,都對本章的要點做了全面的、逐點的總結。自測題每章結尾,都有帶答案的自測題。自測部分的目的是幫助學生衡量自己是否掌握了本章的目標,并強化本章的關鍵概念。編程項目除了第1章介紹背景知識外,以后每章都至少有一個有趣的編程項目學習,作為一類作業(yè)的方式給出。編程項目學習包括確定訓練范圍;收集電子郵件的地址;醫(yī)療診斷;汽車貸款計算器;模擬魚缸等。練習每章結尾的練習部分提供需要努力解決的各種問題。章節(jié)概要*第1章:背景知識。包括計算機結構、軟件、軟件工程原則、面向對象軟件的開發(fā)、問題求解。*第2章:Java基本概念。包括程序組織、main()方法、注釋和空格、類、關鍵詞、標識符和命名習慣、方法、程序執(zhí)行、SDK、常量、變量、操作、簡單類型、操作符、優(yōu)先級、交互式程序、簡單變量賦值。*第3章:使用對象。包括String(字符串)、引用變量、null、插入、截取和連接字符串、引用賦值、String方法。*第4章:類。介紹用戶定義的類、實例變量、構造方法、實例方法、檢查員(inspect-tors)、變異器(mutators)、簡易器(facilitators)、簡單圖形。*第5章:分支語句。包括布爾代數(shù)和真值表、邏輯表達式、布爾類型、布爾值相等和操作符順序、檢測浮點數(shù)相等、操作符優(yōu)先級、短路評估、if語句、if-else語句、字符串和字符的測試、排序、switch語句。*第6章:循環(huán)。包括while語句、簡單的字符串和字符處理、for語句、索引變量范圍、do-while語句。*界面圖形:基于GUI的編程。包括圖形用戶界面、swing、awt、基于事件的編程。*第7章:用方法和類編程。包括參數(shù)傳遞、控制的調用和流程、類變量、范圍、局部范圍、名字重用、方法重載、方法重寫、equals()、toString()、clone()。*第8章:數(shù)組和集合。包括一維數(shù)組、定義、元素的訪問和操縱、顯性初始化、常量數(shù)組、成員、數(shù)組處理、方法、程序參數(shù)、排序、搜索、多維數(shù)組、矩陣、集合框架、ArrayList、集合算法。*第9章:繼承和多態(tài)。包括面向對象設計、重用、父類、子類、單一繼承、super、is-a(是一個)、has-a(有一個)和uses-a(用一個)的關系、控制繼承、默認、protected和private成員、多態(tài)、抽象的父類、接口的層次。*界面圖形:基于GUI的編程。在個人性格識別和微笑競猜游戲的案例中,學習圖形用戶界面的設計和實施。*第10章:異常,即反常事件。包括異常、拋出(throwing)、嘗試(trying)、捕獲(catching)、異常處理器、finally、流的規(guī)范。*第11章:遞歸問題的求解。包括遞歸方法、排序、搜索、可視化。*第12章:線程,即多個獨立的控制流程。包括進程、線程、調度和重復線程、Timer、TimerTask、Thread、Date、Calendar、JOptionPane、休眠、激活、系統(tǒng)軟件。*第13章:測試和調試。包括軟件開發(fā)中的代碼評估、黑箱與白箱測試、檢查、測試工具、說明覆蓋、單元、整體和系統(tǒng)測試、回歸測試、邊界條件、路徑覆蓋、調試。*附錄A:表和操作符。包括Unicode字符集、保留字、操作符和優(yōu)先級。*附錄B:數(shù)字表示方法。包括二進制數(shù)字、十進制數(shù)字、2的補碼、轉換。*附錄C:Applets。即Applet編程。*附錄D:標準Java包。包括java.io、java.lang、java.math、java.net、java.text、java.util。*附錄E:標準Java圖形包。包括java.applet、java.awt和javax.swing。界面圖形通過個人觀察和與同事們交流,發(fā)現(xiàn)不是所有的介紹性編程課程都介紹圖形用戶界面(GUIs),也許時間不允許介紹swingAPI和事件引發(fā)程序,因此,分成兩個階段來介紹圖形編程,作為選講內容。然而,如授課教師想強調這部分,在第4章介紹了類之后,就可以講解GUI。應區(qū)分圖形用戶界面和圖形圖像的生成。Java標準APIs可以很容易地顯示矩形、直線、圓、橢圓、三角形和多邊形。它們的顯示幾乎與控制窗口顯示文字一樣容易。在其他章節(jié)的例子中,都獨立地用到了這些Java特性,這些例子大部分也是可選講的。然而,經驗證明,學生們都喜歡生成圖像,而且,當例子有可視化屬性時,面向對象編程的概念會易于理解。用好本書本書所涵蓋的內容比較多,可能一門課程講授不完。附加的內容是有準備的,即可讓授課教師在編程和軟件開發(fā)方面選擇主題。這本書是為靈活教學而設計的。例如,如果授課教師想推遲對類的介紹,可以先講解控制結構的大部分內容(5.1~5.9小節(jié)和6.1~6.5小節(jié));類似地,如果授課教師想在類之前介紹數(shù)組,數(shù)組的基本內容(8.1~8.3小節(jié)和8.7小節(jié)),可以在討論類之前進行。除了9.2小節(jié)中的例子,對繼承的討論可以放在數(shù)組之前。在介紹了類與數(shù)組之后,可以隨時開始第13章測試和調試的內容。下面是課程的布局。每周主題閱讀1計算和面向對象設計第1章2編程基礎第2章3對象的操縱第3章(3.1~3.5小節(jié))4類的基本概念第4章4~5條件語句第5章(5.1~5.7、5.10小節(jié))5~6循環(huán)語句第6章(6.1~6.5小節(jié))7圖形用戶界面界面圖形:I8~9類第7章10~11數(shù)組和列表第8章12~13繼承和多態(tài)第9章13異常第10章(10.1小節(jié))14測試和調試第13章(13.1~13.2小節(jié))補充資料出版商的網站www.javaprogramprogramdesign.com提供了書中所有例子的源代碼和數(shù)據(jù)文件,還有一整套PowerPoint和PDF格式的幻燈片,以及對不同Java編程IDEs的介紹。其他教學輔助材料可以在網站http://www.cs.virginia.edu/javaprogramdesign上找到。關于作者JamesCohoon是弗吉尼亞大學計算機科學系的教授,并曾經是AT&T貝爾實驗室的技術人員,他從明尼蘇達大學取得博士學位后就加入了這里。他兩次被系里提名為大學最佳教師獎的得主。1994年,Cohoon教授獲得Fulbright獎,去德國講授面向對象編程和軟件工程。Cohoon教授的研究興趣包括算法、電子系統(tǒng)的計算機輔助設計、優(yōu)化策略和計算機科學教育。他在這些領域發(fā)表了70多篇文章。他是美國計算機學會(ACM)、ACM設計自動化專業(yè)組(SIGDA)、ACM計算科學教育專業(yè)組(SIGCSE)、電氣和電子工程師協(xié)會(IEEE)和IEEE電路與系統(tǒng)協(xié)會等組織的成員。他同時擔任ACM委員會、SIG管理執(zhí)行委員會的委員,并曾擔任過ACM出版社董事和SIGDA的主席。他的聯(lián)系地址:cohoon@virginia.edu,個人主頁:http://www.cs.virginia.edu/cohoon。JackDavidson也是弗吉尼亞大學計算機科學系的教授,他從亞利桑那大學獲取博士學位后就來到這里工作。Davidson教授因在教學中的創(chuàng)新而獲得了NCR教員創(chuàng)新獎。Davidson教授的研究興趣包括編譯器、計算機結構、系統(tǒng)軟件和計算機科學教育。他在這些領域發(fā)表了80多篇文章。他是美國計算機學會(ACM)、ACM編程語言專業(yè)組(SIGPL-AN)、ACM計算機結構專業(yè)組(SIGARCH)、ACM計算科學教育專業(yè)組(SIGCSE)、電氣和電子工程師協(xié)會(IEEE)和IEEE計算機學會等組織的成員。從1994年到2000年,他是ACM在編程語言和系統(tǒng)方面的王牌雜志:TransactionsonProgrammingLanguagesandSystems的副主編。他是1998年程序語言設計和實現(xiàn)大會(PLDI'98)的主席,2000年SIGPLAN語言、編譯器和嵌入系統(tǒng)工具工作會議(LCTES2000)的聯(lián)合執(zhí)行主席。他的聯(lián)系地址:jwd@virginia.edu,個人主頁:http://www.cs.virginai.edu/~jwd。進一步閱讀下列是Java語言的主要參考書:*KenArnold,JamesGosling,andDavidHolmes,TheJavaProgrammingLanguage,ThirdEdition,Addison-WesleyPubCo;ISBN:0201704331,June2000.*BillJoy(Editor),GuySteele,JamesGosling,andGiladBracha,TheJavaLanguageSpecification,SecondEdition,Addison-Wesley,ISBN:0201310082,June2000.下面是關于標準庫和更進一步的面向對象設計及程序開發(fā)的資源*DavidM.Geary,GraphicJava1.2,MasteringtheJFC:AWT,Volume1,PrenticeHall,ISBN:0130796662;September1998.*DavidM.Geary,GraphicJava2,Volume2,Swing,PrenticeHall,ISBN:0130796670,March1999.*JoshuaEngel,ProgrammingfortheJavaVirtualMachine,Addison-Wesley,ISBN:0201309726,June1999.*CayS.HorstmannandGaryCornell,CoreJava2,VolumeI,F(xiàn)undamentals,PrenticeHallPTR,ISBN:0130894680,December2000.*CayS.HorstmannandGaryCornell,CoreJava2:VolumeII,AdvancedFeatures,PrenticeHall,ISBN:0130927384,December2001.*MatthewRobinsonandPavelA.Vorobiev,Swing,ManningPublicationsCompany;ISBN:1884777848,December1999.*StephenA.SteltingandOlavMaassen,AppliedJavaPatterns,PrenticeHall;ISBN:0130935387,December2001.*SunMicrosystems,JavaLookandFeelDesignGuidelines:AdvancedTopics,AddisonWesleyProfessional;ISBN:0201775824,December2001.*AlVermeulen(Editor),ScottW.Ambler,GregBumgardner,EldonMetz,AlanVermeulen,TrevorMisfeldt,JimShur,andPatrickThompson,TheElementsofJavaStyle,CambridgeUniversityPress;ISBN:0521777682,January2000.*JohnZukowski,JavaCollections,APress;ISBN:1893115925,April2001.感謝我們感謝弗吉尼亞大學為本書的完成提供了環(huán)境。我們要特別感謝JackStankovic,他的不懈地努力使得計算機科學系處于國內領先的地位。我們感謝JennaCohoon、JoanneCohoon和TomHorton的評論,我們還要感謝HannahCohoon對魚的藝術設計和JJCohoon對圖標的藝術設計。我們感謝為本書的出版做出貢獻的McGraw-Hill的全體員工。特別地,我們感謝BetsyJones的支持與鼓勵;TomCason的明智建議;KayBrimeyer的幕后產品管理技能;DavidHash對藝術和封面設計隊伍的領導;PatSteele的編輯和DawnBercier的市場創(chuàng)意。我們向下列人員提出特別感謝:我們的編輯KellyLowery,她支持、指導并關注了這一項目的全過程;我們的開發(fā)編輯MelindaDougharty,她管理并匯總了審閱過程;還有MaryCahall和她的組織能力。