本教材編寫過程中堅持夠用、實用、簡單、直接的教學理念, 對教學內容進行精心設計和選擇, 通過120個示例程序、100個程序編寫任務、50個微視頻和測試、8個難度和工作量適宜的課程設計, 為學生構建全方位立體化、科學合理的Java學習路線圖, 構建了微視頻、編程、實驗、課程設計在內的Java實訓體系。
1.配有近20小時、60段微課視頻,掃描書中二維碼即可訪問,并提供二維碼頁碼索引。
2.精心設計150個程序實例、75道編程實踐題與若干實際操作題,重點題目提供解題過程視頻。所有題目提供解題源代碼。
3.精心設計8個課程設計項目并提供詳細解析。
4.提供SCJP(原Sun公司Java認證考試)全英文自測題,幫助讀者提高英文水平。
前言 經過二十幾年的發展,Java語言已經成為計算機史上影響深遠的編程語言。不但如此,Java已經超出了編程語言的范疇,發展成為一個開發平臺、一個產業、一種思想、一種文化。 “Java程序設計”是計算機科學與技術專業的一門專業基礎必修課程。在教育部計算機基礎課程教學指導委員會制定的白皮書中,“Java程序設計”課程被列為核心課程。Java軟件開發方向是我國目前IT行業計算機類專業學生的重要的就業方向。
1. 高校IT人才培養的背景 (1) 經濟社會的高速發展對IT產業(尤其是軟件產業)提出了更高的要求,對Java軟件開發人才從數量和質量方面也都提出了更高的要求。 (2) 智能手機操作系統——Android的市場占有率一路攀升。Android系統采用Java語言來開發手機應用程序,這給Java帶來新的發展機遇。 (3) 教育技術的進步和移動互聯網時代的到來打破了高校進行知識傳播的技術壁壘,大量的資本和風險投資涌進IT培訓產業。達內、東軟、傳智播客等實體IT培訓機構,開課吧、慕課網、極客網等在線IT培養機構引入了先進的教學理念、強大的技術支持,再加上商業化運作,給高校IT人才培養帶來巨大的挑戰和競爭的壓力。 (4) 教學理念、教學模式的發展: CDIO、MOOC、翻轉課堂、混合式教學、案例式教學、目標驅動、問題導向等教學理念、教學模式迅速滲透到每一個傳統課堂。傳統的“單向封閉”的教學環境開始走向開放,傳統的“以教師為中心”的師生關系開始變為“以學生為中心”,傳統課堂中的教師從知識傳授者和課堂管理者轉變為學習指導者、教學資源開發者、教學幫助者和促進者,傳統課堂中的學生則由“被動接受者”轉變為主動研究者。 (5) 教學環境的變化: 教室、實驗室硬件配置齊全,實現了高速、穩定的Internet接入; 筆記本和手機等互聯網接入設備日漸普及,這些都為先進教學理念和教學模式的實施提供了硬件和軟件上的準備。 (6) 教育參與者: 教師正在樹立“教育就是服務”的教育觀念,正在貫徹工程教育的教育理念,從注重“教師教什么”轉移到“學生學到了什么”。學生作為數字原住民,對新鮮事物、新技術、新教學方式(人性化學習、泛在學習等)有著天然的渴望。 IT產業、軟件技術、軟件人才培養競爭、教學理念、教學模式、教學環境、教學對象等因素的發展和變化使得高校必須進行教學改革,教師必須圍繞以上因素進行課程教學改革,教材建設也是勢在必行。
2. Java教材存在的問題 教材作為人才培養的重要載體,是主要的教學資源之一,是教與學的重要憑借,是教學理念、教學特色、教學方法、教學內容、教學資源等的全面體現。以紙質教材為中心,構建支持學生學習全過程、線上線下相結合的全新生態系統,是國內外教材發展的*新趨勢。鑒于Java技術的市場地位,Java教材從國外原版教材到翻譯教材再到本土化教材,呈現出百家齊放、百家爭鳴的良好局面。目前,Java教材也存在以下問題: 教學理念、教學模式不能緊跟時代潮流,教學內容的選擇和呈現過于單一,對學生的學習過程支持不夠,特色不夠鮮明,等等。
3. 本書的內容 根據市場定位和面向受眾不同,Sun公司把Java技術分成Java ME、Java SE和Java EE幾個平臺。顯然,Java*成功的領域是Java EE。學習Java應該從Java SE入手,為后續學習打下堅實的基礎,然后才能學習Java EE和Java ME。 本書主要面向Java SE,基于JDK 1.7和Eclipse IDE環境,對教學內容進行重新選擇和設計,刪除了使用頻率少或已經淘汰的技術,如Applet等; 加入JDK 1.5、JDK 1.6、JDK 1.7等版本的語言新特性; 加強Eclipse IDE環境的使用; 加強swing GUI編程技術教學,引入了swing開發插件——WindowBuilder; 加強多線程技術教學,介紹了Concurrency開發庫技術; 加強Java網絡編程技術、JDBC編程技術。本書分為上篇、中篇和下篇3個部分,分別介紹如下。 (1) 上篇“Java編程基礎”: 本篇通過Java發展介紹、Java開發環境的構建、Java語言基礎、流程控制、數組、類和對象、包裝類、Java文檔注釋、UML、接口、內部類、異常處理等內容使讀者能夠快速掌握Java語言語法、Java編程基本技巧和面向對象編程思想,為以后編程奠定堅實的基礎。 (2) 中篇“Java高級編程”: 本篇首先介紹java.lang包中的常見類、java.util包中的常見類、java.text包中的常見類、集合類框架、枚舉、泛型、正則表達式,然后分別介紹Java I/O技術、Java GUI編程技術、Java多線程技術、Java網絡編程技術、JDBC編程技術等。通過本篇的學習,讀者能夠具備進行Java應用開發的技術基礎。 (3) 下篇“課程設計”: 本篇采用CDIO“做中學”的教學理念,通過下達項目任務、項目設計、項目學中做、總結提高等步驟介紹了8個工作量適中、綜合性強、能解決實際問題的Java課程設計。課程設計將本書的內容進一步融會貫通,使讀者在解決實際問題的過程中加深對技術的理解和應用。 在教學時教師可以根據學時、教學對象、教學目的等因素對教學內容進行選擇、組合和取舍。
4. 本書的特色 編者投入了大量精力,力求使本書體現以下特色。 (1) 強調“簡單、直接、實用、夠用”的教學理念,貫徹“以服務為宗旨,以應用為目的,以實用為主,理論夠用為度”的教學原則,以培養學生應用能力為主線,通過一個知識點“知識準備、示例程序、總結提高”的步驟來講解程序的編寫、調試和運行。 (2) 案例式教學: 強調“用Java語言講解Java語言”的教學理念,根據教學內容精選142個示例程序,強調示例程序的針對性、實用性、關聯性,讓學生通過閱讀和調試示例程序迅速理解理論知識,并達到實踐效果。本書所有示例程序均經過反復調試,確保風格統一、注解翔實、代碼規范、正確高效。 (3) 編程任務: 本書在每章結束時均提供了和教學內容對應的編程實踐任務,分不同的難度等級,并給出編程提示。本書共提供了100個編程實踐任務。 (4) 低成本微課的錄制: 編者認為動輒幾個吉字節、幾十個小時的教學全程錄像是高成本、低效率的,而且沒有必要,通過仔細閱讀即可理解的內容沒有必要錄制成視頻。但Java教學過程中的重/難點、編程實踐等內容非常有必要使用Camtasia Studio軟件進行屏幕錄像、編輯后通過網絡提供給學生。這種方法對于教師來說是低成本、低門檻、高效率的,教師簡單學習后即可上手,無須求助他人。每段微視頻(微課)限制在15分鐘左右,集中講解一個知識點或一個程序的編寫,詳細展現編程實現的思維過程。本書免費提供60段微視頻(微課),總時長上千分鐘,可掃描二維碼觀看,詳細列表見前言的*后。 (5) 強調JDK文檔的閱讀: Java類庫(又稱為Java應用程序編程接口API)由編譯器廠商、獨立軟件供應商等以Jar文件和文檔的形式提供。通過API文檔來了解類庫中類和方法的使用是一個程序員必須掌握的技巧。 (6) 強調英文的閱讀: 英文軟件的漢化不盡如人意,因此讀者在學習Java的過程中對英文的閱讀是一個不可回避的問題,如JDK英文文檔的閱讀、Eclipse純英文IDE環境、英文標識符的命名、SCJP全英文試題的閱讀等(關于SCJP考試的說明請參閱附錄A),本書在各章的自測題中引入了全英文的SCJP選擇題,在附錄中增加了在Eclipse英文版中進行Java應用開發的內容,并給出Eclipse常見提示錯誤的中文翻譯。 (7) 基于CDIO的課程設計: 在學完Java技術之后,讀者只是具備了Java編程基礎,如果沒有課程設計環節,知識和能力也就做不到真正的融會貫通,因此,本書以工程教育理念為指導,遵循CDIO教學模式,采用項目導向的方式,充分體現“做中學”的理念,提供了8個任務要求明確、工作量適中、綜合性強的Java應用項目。 (8) 本書以“學生學習Java技術”的角度進行知識的呈現,而不像傳統教材那樣僅僅站在教師教學的角度,并強調支持和服務要貫穿學生的整個學習過程。同時,本書為教師實施翻轉課堂教學提供了支持,為評價學生學習能力提供了數量足夠的素材和題庫。
5. 本書的使用 (1) 第1章的例程要求安裝JDK 1.7后在DOS命令行下完成Java程序的編寫、調試和運行。 (2) 從第2章開始,要求安裝Eclipse或MyEclipse,構建Java軟件開發環境; 要求在Eclipse/MyEclipse IDE中完成Java程序的編寫、調試和運行。請讀者詳細閱讀附錄B,掌握Eclipse/MyEclipse的基本使用技巧。 (3) Java編程實訓作業以Java Project的形式提交,具體要求請參考2.7節。 (4) 為減少篇幅,本書中的Java示例程序有以下特點: 省略了import語句; 省略了部分注釋;
作者:張延軍、王保民、何月梅、司玲玲、喬德軍
目錄
上篇Java編程基礎
第1章走進Java世界
1.1Java語言簡介
1.1.1Java發展簡史
1.1.2Sun與Microsoft
1.1.3Java的影響力
1.1.4Java語言的特點
1.2Java開發環境的構建
1.2.1高級語言的運行機制
1.2.2JVM、JRE和JDK
1.2.3JDK的下載和安裝
1.2.4JDK環境變量的配置
1.2.5JDK安裝文件夾介紹
1.3Java程序的編輯、編譯和運行
1.3.1*個Java程序(HelloWorld.java)
1.3.2顯示命令行參數(CommArg.java)
1.3.3Java程序的各種形態
1.4Java IDE介紹
1.5本章小結
1.6自測題
1.7編程實訓
第2章Java語言基礎
2.1Java程序的構成
2.1.1標識符
2.1.2關鍵字和保留字
2.1.3Java注釋
2.2Java數據類型、常量和變量
2.2.1Java數據類型
2.2.2常量
2.2.3變量
2.2.4基本數據類型的轉換
2.2.5基本數據類型的對象包裝類
2.3Java運算符、表達式、語句和程序
2.3.1運算符
2.3.2表達式
2.3.3語句和程序
2.3.4Java程序的書寫風格
2.4Java流程控制語句
2.4.1順序結構
2.4.2分支結構
2.4.3循環結構
2.4.4break和continue語句
2.5Java語言編程的基本技巧
2.5.1Java數據的輸出
2.5.2Java數據的輸入
2.5.3用JOptionPane類實現各種對話框
2.5.4Java程序運行時間的計算
2.6Java數組
2.6.1一維數組
2.6.2二維數組
2.6.3數組工具類(Arrays)
2.7Java編程作業的提交要求
2.8本章小結
2.9自測題
2.10編程實訓
第3章面向對象編程基礎
3.1面向對象技術簡介
3.1.1面向過程和面向對象
3.1.2面向對象的特征
3.2類
3.2.1類的定義
3.2.2成員變量
3.2.3局部變量
3.2.4成員方法的定義
3.2.5成員方法的調用
3.2.6成員方法的遞歸調用
3.3對象的實例化與清除
3.3.1構造方法的定義
3.3.2構造方法的調用——實例化對象
3.3.3垃圾回收機制
3.3.4Java程序的優化
3.4引入類和定義包
3.4.1包概念的提出
3.4.2JDK API常見包介紹
3.4.3package和import語句
3.5Java文檔注釋
3.5.1常用的Javadoc標記
3.5.2利用javadoc.exe生成API文檔的方法
3.5.3在Eclipse中生成API文檔的方法
3.6UML
3.6.1UML簡介
3.6.2UML 建模工具
3.6.3在MyEclipse下進行UML建模
3.7俄羅斯方塊程序的閱讀(Tetris.java)
3.8本章小結
3.9自測題
第3章 面向對象編程基礎
在本章我們將一起學習以下內容: 面向對象技術簡介。 類的定義、變量和方法的定義。 對象的實例化與清除。 引入類和定義包。 Java文檔注釋。 用UML繪制類圖。 相對于硬件技術發展的日新月異,軟件技術的發展相當遲緩。軟件技術面臨著非常多的挑戰,在要求軟件功能更加新穎、更加強大的同時,人們又要求軟件開發人員可以快速、高效地構建質量優、重用性高、維護性強的軟件系統。 軟件開發從匯編語言、過程式語言、面向對象、面向組件發展到面向服務,每一步都體現了不斷抽象、更加貼近業務實際的發展趨勢。 軟件開發人員發現采用模塊化、面向對象的設計和實現方法可以顯著提高軟件開發的工作效率,而且面向對象程序更易于理解、重用性高,便于糾錯和修正。
3.1面向對象技術簡介
3.1.1面向過程和面向對象 目前軟件開發領域主要有結構化開發方法和面向對象開發方法兩種。 結構化開發方法(又稱為面向過程)的程序設計簡單,可讀性強,易于閱讀和理解,便于維護,是面向對象程序設計的基礎。面向過程把問題求解過程(即算法)放在*位,主張按功能把軟件系統逐步細分,遵循“自頂向下,逐步求精”的思想。面向過程提供順序、分支和循環3種邏輯結構,每種邏輯結構要求單入口和單出口。 面向對象開發方法是一種以事物為中心的編程思想,用一種更符合人們認識客觀世界的思維方式進行程序設計。它克服了面向過程的缺點,達到了軟件工程的3個主要目標,即重用性、靈活性和擴展性。 面向對象的軟件開發方法的生命周期主要包含了以下階段。
(1) 面向對象的分析OOA(ObjectOriented Analysis): 對用戶需求進行分析,確定系統的范圍和功能,明確要做什么。
(2) 面向對象的設計OOD(ObjectOriented Design): 對OOA分析的結果做進一步的規范化整理,以便能夠被OOP直接接受。目前業界統一采用UML來描述和記錄OOA與OOD的結果。
(3) 面向對象的程序設計OOP(ObjectOriented Program): 在面向對象程序設計方法中,程序被看作是相互協作的對象的集合。每個對象都是某個類的實例。所有類構成一個通過繼承關系聯系的樹形層次結構。因此,面向對象程序設計的基本構成是類和對象。類是一組相似對象的描述,描述了該類對象所具有的共同特征。對象封裝了描述其狀態的數據(屬性)以及可以對這些數據進行的操作(方法),對象之間通過發送消息相互協作。 面向對象的主要概念包括類和對象、接口、包、屬性、方法(一般方法、構造方法、抽象方法)、修飾符、引用類型的轉換(上溯/下溯造型)等。
3.1.2面向對象的特征 面向對象具有四大特征,即抽象、封裝、繼承和多態。
1. 抽象 抽象其實也是所有計算機語言的特征,指從眾多的事物中舍棄個別的、非本質的部分,提煉出計算機系統所關注的、共同的、本質的部分(屬性和功能)的過程。抽象包括過程抽象和數據抽象。 過程抽象將整個系統的功能劃分為若干部分,強調功能完成的過程和步驟,而隱藏其具體的實現。 數據抽象是將系統中需要處理的數據和這些數據上的操作結合在一起,抽象成不同的抽象數據類型(ADT)。
2.封裝 封裝(Encapsulation)指屬性和方法的定義都封裝在類定義中,然后通過對其可見性來控制外部對類成員的可訪問性。 (1) 類(對象)的屬性和方法是不可分割的整體,反映了客觀事物的靜態特征和動態行為相統一的客觀規律,使計算機軟件對客觀事物的描述更接近人類表述。過去的面向過程的編程語言將功能和數據分離,使軟件對客觀事物的描述存在偏差,很難自然地用語言表達客觀事物的對應關系。在Java中,類封裝了屬性、方法、構造方法、語句塊、內部類等成員,如圖31所示。 用UML標準符號繪制Car類圖如圖32所示。 圖31類封裝示意圖 圖32UML類圖 UML類圖可以轉換為Java語言: 01class Car{ 02private int color_number; 03private int door_number; 04private int speed; 05public void brake(){…} 06public void speedUp(){…} 07public void slowDown(){…} 08} (2) 封裝還涉及類或對象內部細節的隱蔽性。類設計者可以通過使用訪問權限控制修飾符private、protected、public 3個關鍵字、4個訪問控制級別來細粒度地控制外部是否可以訪問類或對象的成員。一般將屬性設置為private,然后提供Getter和Setter方法存取數據的統一接口。訪問其他類對象成員的示意圖如圖33所示。 圖33訪問其他類對象成員的示意圖 【示例程序31】自定義日期類(MyDate.java) 功能描述: MyDate日期類型有年、月、日3個私有屬性; 提供了無參構造方法,包含全部屬性的構造方法; 在自動生成私有屬性的Getter和Setter方法的代碼的基礎上進行了定制。
01public class MyDate { 02private int year; 03private int month; 04private int day; 05public MyDate() { 06super(); 07} 08public MyDate(int year, int month, int day) { 09super(); 10setYear(year); 11setMonth(month); 12setDay(day); 13} 14public int getYear() { 15return year; 16} 17public void setYear(int year) { 18if(year>1&&year<9999){ 19this.year = year; 20} 21} 22public int getMonth() { 23return month; 24} 25public void setMonth(int month) { 26if(month>=1&&month<=12){ 27this.month = month; 28} 29} 30public int getDay() { 31return day; 32} 33public void setDay(int day) { 34if(day>=1&&day<=31){ 35this.day = day; 36} 37} 38}