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