“Java程序設(shè)計”是北京理工大學(xué)計算機學(xué)院開設(shè)的選修課程,主講教師是金旭亮。本教學(xué)資源主要包括上課所使用之PPT(己轉(zhuǎn)為PDF格式)和范例源碼,2013版的課件是我經(jīng)重新調(diào)整并設(shè)計的,大大增強了編程技能訓(xùn)練的內(nèi)容,同時在內(nèi)容安排上更加注重循序漸進。
這些課件在設(shè)計時力圖同時支持課堂教學(xué)及課后學(xué)生自學(xué),基本模式是:我在課堂上只講授重點內(nèi)容,并現(xiàn)場展示編程開發(fā)的過程和技術(shù)關(guān)鍵點,以及與之相關(guān)的計算機理論知識和內(nèi)部運作機理,學(xué)生在課后應(yīng)該完成以下幾件事:
(1)運行并仔細閱讀每個示例,通過修改示例代碼扎實掌握Java面向?qū)ο缶幊痰恼Z法與相關(guān)知識。
(2)完成課件中所布置的作業(yè)(非常重要。,這些作業(yè)都經(jīng)過了仔細的設(shè)計與安排,完成它們是培養(yǎng)Java編程基本技能所必需。除非你打算隨意地在計算機專業(yè)混個畢業(yè)拉倒,否則,請一定要動手完成這些編程練習(xí)。遇到困難,一是找同學(xué)討論交流,二是使用搜索引擎,最后一招,找老師。
課件及代碼說明:
本課件適用對象:學(xué)過C語言,對編程有興趣,打算日后從事軟件開發(fā)工作,不要求有面向?qū)ο缶幊探?jīng)驗。
本課件所有代碼基于JDK7,在Eclipse 4.X和Netbeans 7.X中測試通過。
21講全課程介紹:
第1部分 Java編程起步
Note:本部分內(nèi)容極為基礎(chǔ),主要是介紹Java結(jié)構(gòu)化編程的相關(guān)語法,涉及到一點面向?qū)ο笾R,有C語言基礎(chǔ)的同學(xué)會學(xué)得很多。
對于編程基礎(chǔ)不扎實的同學(xué),請認真地完成本部份中所有的編程練習(xí)。
這部分上課是一帶而過,只講其中的一些要點,完整內(nèi)容同學(xué)們需自學(xué)。
第1講 Java導(dǎo)論與Java開發(fā)環(huán)境
包括兩個PPT:
(1)Java導(dǎo)論與Java開發(fā)環(huán)境:介紹Java開發(fā)的基礎(chǔ)知識,學(xué)會安裝相應(yīng)的軟件并正確地配置好它們。
(2)Eclipse初步:學(xué)會使用Eclipse編寫Java應(yīng)用程序。
第2講 Java應(yīng)用程序與Applet
包括兩個PPT:
(1)Java Application基礎(chǔ):這是最簡單的Java程序類型,本課程大部分實例是此類型,用它來學(xué)習(xí)Java非常合適。
(2)Java Applet基礎(chǔ):Java Applet是運行在瀏覽器環(huán)境中的Java應(yīng)用程序,不過此技術(shù)在實際中很少用,此講同學(xué)們只需瀏覽一下,只要知道Applet是怎么回事,如何運行它就夠了。
第3講 Java語法基礎(chǔ)
包括兩個PPT:
(1)Java語法基礎(chǔ),介紹數(shù)據(jù)類型、變量、運算符等基礎(chǔ)知識,注意與C的區(qū)別。
(2)控制結(jié)構(gòu):Java分支與循環(huán)語法。
第4講 方法
這一講的重點是Java方法重載的語法特性,以乃訓(xùn)練遞歸的編程技巧。另外,本講還介紹了Java中日期相關(guān)的類型、如何處理大數(shù)字以及浮點數(shù)比較等內(nèi)容。本講包容不少的編程練習(xí),主要目的是訓(xùn)練最基本的編程技能。
第2部分 Java面向?qū)ο缶幊袒A(chǔ)
本部分主要介紹Java實現(xiàn)面向?qū)ο缶幊蹋∣OP)的基本方法,其中所介紹的OOP思想其實是獨立于Java語言的,是現(xiàn)代軟件工程師的基本功。需要下功夫扎實掌握,打好OOP基礎(chǔ)非常關(guān)鍵,不然,在Java技術(shù)領(lǐng)域?qū)⑿兄贿h。
第5講 類和對象
本講主要介紹如何在Java中設(shè)計一個類的基礎(chǔ)知識,包括類的初始化方法,“==”的含義,this的用法,裝箱與拆箱等,其中,理解對象變量的含義是關(guān)鍵。本講還介紹了javap反匯編.class文件的基本方法。
本講屬于Java面向?qū)ο缶幊套顬榛A(chǔ)的內(nèi)容,必須牢固掌握。
第6講 包
包類似于C++的namespace,主要用于解決同名沖突和實現(xiàn)代碼重用,這部分的關(guān)鍵是要掌握如何定義包,如何使用包,包與文件系統(tǒng)的路徑有何關(guān)系,請務(wù)必在命令行程序中實驗成功如何運行放在包中的某個Java類中的main()方法。另外,本講還介紹了Jar包的用途和制作方法。
Java的可復(fù)用組件多以Jar包的形式提供,因此,把握本節(jié)內(nèi)容,對于實際開發(fā)很重要。
第7講 字符串與正則表達式
本講包括兩部份內(nèi)容:
(1)字符串。在開發(fā)中,String算是最常用的數(shù)據(jù)類型了,它的最重要特點是String對象內(nèi)容只讀,另外,施加于兩個String對象的“==”和"equas()",其含義是不同的。在比較大的循環(huán)中應(yīng)該避免進行過多的字符串拼接操作,的確需要時,可以考慮使用StringBuffer或StringBuilder類取代。這些是String部分應(yīng)該掌握的重點內(nèi)容。
(2)正則表達式。本講PPT只是介紹了正則表達式的基礎(chǔ)知識,有專門介紹正則表達式的技術(shù)書籍,感興趣的同學(xué)們可以在課外進一步地深入學(xué)習(xí)。強調(diào)一下,正則表達式在開發(fā)中非常有用,同學(xué)們必須具備基本的編寫正則表達式的能力。
第8講 數(shù)組
本講的重點是理解對象數(shù)組,特別要注意在課上介紹過的它的內(nèi)存分配模型。
第9講 繼承、接口與多態(tài)
這一講是經(jīng)典的面向?qū)ο缶幊虄?nèi)容,包容相當多的且非常重要而基礎(chǔ)的知識與技能,難點也不少:
(1)重點注意子類父類字段與方法同名時出現(xiàn)的種種現(xiàn)象,并能解釋其原因。
(2)不可變的類有什么好處?思索:為何String類要設(shè)計成只讀的?
(3)理解多態(tài)這一概念,并體會多態(tài)給開發(fā)所帶來的正面與負面影響。
請注意教師在課堂上現(xiàn)場編程演示和分析的那些代碼示例。
第10講 異常處理
本講介紹了Java異常處理的基礎(chǔ)知識。初學(xué)者往往對異常處理重視不夠,事實上,在開發(fā)中帶來麻煩的往往就是未經(jīng)處理的各種異常,另外,用戶往往也會因為你的程序中有未捕獲的異常而對程序產(chǎn)生不滿甚至立即卸載它。要想開發(fā)出健壯的應(yīng)用,就必須認真掌握這部份知識。本講中介紹了“捕獲JDK異常轉(zhuǎn)換為業(yè)務(wù)邏輯異常”的異常處理策略,這在多層應(yīng)用中很有用,需要特別注意一下。
第11講 泛型程序設(shè)計
Java最初在設(shè)計時是沒有考慮要支持泛型的,只是后來隨著Java應(yīng)用越來越廣,開發(fā)者有這個需求,才加入了泛型特性,但由于JVM不好改,所以javac編譯器對泛型代碼采用了“擦除”的方式進行編譯,這是Java泛型技術(shù)的重要特點。本講介紹了Java泛型編程語法特性,JDK中廣泛使用了泛型,泛型知識對掌握Java技術(shù)很重要。
第12講 內(nèi)部類
本講介紹Java內(nèi)部類語法,學(xué)習(xí)時注意其應(yīng)用場景。
第13講《面向?qū)ο缶幊袒炯寄堋?/p>
這部分重點介紹了Java編程實現(xiàn)對象比較、對象組合和對象復(fù)制的基本方式,是面向?qū)ο缶幊瘫仨氄莆盏幕A(chǔ)知識。
第14講 數(shù)據(jù)結(jié)構(gòu)與算法的Java實現(xiàn)
數(shù)據(jù)結(jié)構(gòu)與算法對于開發(fā)而言屬“內(nèi)功”,很重要,也是許多公司面試題的重要內(nèi)容。計算機專業(yè)學(xué)生都學(xué)過《數(shù)據(jù)結(jié)構(gòu)》,因此本講的重點在于如何用Java實現(xiàn)它們,并給出不少編程練習(xí),許多練習(xí)進一步擴充就可以作為本課程大作業(yè)的內(nèi)容。動手完成本講所布置的編程作業(yè),有助于培養(yǎng)同學(xué)們基本的Java面向?qū)ο缶幊碳寄堋?br />
第15講 對象集合
JDK中包容數(shù)十種各種類型的對象集合,還有一堆的各種接口,給人的感覺相當混亂。在實際開發(fā)中,一定要花點時間依據(jù)具體應(yīng)用場景選擇合適的對象集合,并且要注意避開這些對象集合中隱藏的一些陷阱,因此,在使用它們之間進行充分的測試是有必要的,確保你真正地把握了要用的這些集合的特性。本講內(nèi)容較多,對JDK中最主要的一些集合類型進行了介紹,并提供了數(shù)十個實例展示它們的用法。本講最后還給出了一些編程題目,同學(xué)們應(yīng)動手完成它們。
第3部分 深入探索Java技術(shù)領(lǐng)域
在本部分中,將集中探討一些JDK中的特定技術(shù)領(lǐng)域。這些技術(shù)領(lǐng)域在實際開發(fā)中被頻繁地應(yīng)用。
第16講 文件與流
文件可用于存儲應(yīng)用程序數(shù)據(jù),而流則是Java讀取文件的基本方式。本講介紹了JDK中與文件相關(guān)的類和組件的用法,包容大量實例,許多能直接應(yīng)用于開發(fā)中。
第17講 序列化
序列化技術(shù)主要用于兩個場景:(1)將對象當前狀態(tài)保存到文件等持久介質(zhì)中(2)在網(wǎng)絡(luò)中遠程傳輸對象到另一臺機器上。在實際開發(fā)中,把對象進行序列化是非常常見的。本PPT主要介紹了Java中如何把對象以二進制形式序列化到文件中的方法,僅僅只涉及Java序列化技術(shù)領(lǐng)域的一部分。
第18講 反射
所謂反射,就是在程序運行時通過動態(tài)查詢Java組件的類型信息,完成對象創(chuàng)建、方法調(diào)用等功能。反射為設(shè)計開發(fā)支持插件的軟件系統(tǒng)所必需。有大量的Java框架使用了反射技術(shù)。本講分為三部分:
(1)反射:介紹Java反射的基礎(chǔ)知識
(2)JavaBean:JavaBean其實可以看成是一種“遵循標準”而實現(xiàn)的類,Java平臺為訪問它們提供了額外的支持,JavaBean在Java EE中應(yīng)用得比較多。
(3)注解:Java中的“注解(annotation)”指一些附加在代碼之上的,以“@”打頭的“小標簽”,比如“@Override”,通過使用它們,能夠在不更改類源代碼的前提下,給類附加特定的功能或信息。各種Java框架和技術(shù),比如JUnit之類,都大量地應(yīng)用了它們。
第19講 GUI界面設(shè)計與事件處理
本講包容相當豐富的內(nèi)容,共分為5個子部分:
(1) Java GUI設(shè)計基礎(chǔ):介紹了Java GUI設(shè)計中的一些基礎(chǔ)知識和術(shù)語,本部分需重點注意“GUI程序設(shè)計的基本步驟”,理解“容器”、“控件”、“布局管理器”、“事件”幾個重要概念。
(2) 使用GUI控件:包容大量的例子,介紹各個具體控件的使用方法。
(3) 容器布局管理器:介紹Swing界面設(shè)計中常用的幾種布局管理器的用法,包容相應(yīng)實例。
(4) Java事件處理模型:此部分極為重要,是Java GUI界面設(shè)計技術(shù)的核心所在,其所介紹的內(nèi)容許多都可以用在Android上,此部分還包容大量的實例,可供同學(xué)們進行課程設(shè)計時參考。請同學(xué)們務(wù)必扎實掌握本部分內(nèi)容。
(5)Java GUI編程技能訓(xùn)練:提供了一些編程場景,完成這些編程任務(wù),能讓你的Java開發(fā)能力提升一截。
第20講 Java圖形程序設(shè)計
本講介紹JDK中所包容的2D繪圖功能,包括各種繪圖對象及繪圖方法的介紹,還介紹了分形。本講設(shè)計了豐富的編程練習(xí)。
第21講 多線程
在多核CPU大行于世的時代,多線程編程是每一個軟件開發(fā)者的必備技能。經(jīng)過多年的持續(xù)完善,JDK中包容了豐富的多線程組件,能滿足絕大多數(shù)開發(fā)需求。本講分為三部分,每部分都包容著重要的內(nèi)容:
(1)多線程技術(shù)基礎(chǔ):介紹了進程、線程的基礎(chǔ)知識,如何編寫多線程代碼,如何控制線程的執(zhí)行過程,線程組,Thread Executor Framework以及GUI程序中的多線程等重要內(nèi)容。
(2)線程同步:本部分介紹了Java同步方法、同步代碼塊的使用方法,如何協(xié)調(diào)線程之間的協(xié)作關(guān)系,鎖,還有JDK所提供的各種線程同步對象和線程安全的集合對象。
(3)多線程部分練習(xí)手冊:提供了多道由淺入深的編程訓(xùn)練題,完成它們能幫助同學(xué)們提升自己的開發(fā)能力。
Java多線程技術(shù)是Java學(xué)習(xí)中的難點,也是各公司面試題中經(jīng)常出現(xiàn)的技術(shù)領(lǐng)域。此部分請同學(xué)們務(wù)必下功夫掌握。