版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 第1章 Java與面向對象思想</p><p> 工欲善其事,必先明其理、利其器。為了在學習Java的征途中少走彎路、多走捷徑,我們有必要了解Java語言中蘊涵的面向對象等指導思想,并在設計和開發(fā)Java程序的過程中充分應用這些 思想。</p><p> 1.1 初識Java語言</p><p> 德國大哲學家黑格爾說過:
2、凡是存在的,都是合理的。用這句話的推論可以很好地形容Java語言的前景:凡是流行的,總有它流行的道理。</p><p> 雖然說,Java語言的誕生是個偶然的過程,但它卻能很好地融合“面向對象”、“跨平臺”和“編程簡潔”等特性,所以它的流行是個必然的趨勢。并且,隨著Java語言的不斷發(fā)展,它的應用前景將更為寬闊。</p><p> 說到這里,可能有的讀者會被“面向對象思想”、“跨平臺”
3、等名詞搞得找不到方向,其實,這些不是高深晦澀的八股文,而是同我們現(xiàn)實生活密切相關的概念。</p><p> 1.1.1 Java是什么</p><p> Java語言的誕生可以說是個“無意栽柳綠成蔭”的過程。在20世紀90年代,Sun公司的工程師們經(jīng)常要商討如何解決面包烘烤機、恒溫器等日常數(shù)控系統(tǒng)中的數(shù)據(jù)共享問題,比方說,如何在面包烘烤機的硬件系統(tǒng)內(nèi)核里讀取恒溫器里關于溫度的數(shù)據(jù),實
4、現(xiàn)定時加熱的功能。</p><p> 這些工程師在研究中發(fā)現(xiàn),由于不同產(chǎn)品的制造商們采用不同的硬件和應用軟件來組裝他們的產(chǎn)品,所以要讓這些產(chǎn)品在協(xié)同工作時實現(xiàn)數(shù)據(jù)共享是比較困難的,這些困難主要有:如何保證共享數(shù)據(jù)時的數(shù)據(jù)安全性,如何定義數(shù)據(jù)共享和傳輸?shù)母袷降取?lt;/p><p> 因此,這些工程師把各種不同的產(chǎn)品按功能模塊拆分,理解其基本功能模塊(比如加熱模塊)的特性,以便使它們能更好地
5、一起工作。事實上,他們的這種工作方法,除了能有效解決最初的“共享數(shù)據(jù)”的問題外,同時也可以解決因硬件標準不同而導致的其他方面的問題,比如可以讓烤面包機和恒溫器結合,讓烤面包機在達到一定的時間停止烘烤,進行保溫工作。</p><p> 隨著研究的深入,他們發(fā)現(xiàn),通過這種工作方法,還能通過集成功能模塊,快速有效地組裝各種產(chǎn)品和模塊。不過,這種集成,需要在各種不同標準的模塊上構建一層統(tǒng)一的能屏蔽不同硬件模塊差異的操作
6、系統(tǒng)(這就是Java虛擬機的雛形),由于當時尚無一種語言可以實現(xiàn)上述的工作思路,所以工程師們就打算自己開發(fā)一種新的編程語言,于是Java語言應運而生。</p><p> Java語言之所以流行,是因為它具有跨平臺性,即使用Java語言,程序員可以開發(fā)能在不同網(wǎng)絡平臺和不同操作系統(tǒng)上運行的應用軟件。這樣的好處在于,使用Java的軟件開發(fā)公司就不必再考慮項目在不同操作系統(tǒng)中的開發(fā)和安裝細節(jié),從而可以把更多的精力和資
7、源安排在開發(fā)項目功能和設計項目的架構上。</p><p> 綜上所述,Java除了具有其他編程語言所有的好處之外,還具有以下四個特點:</p><p> 由于Java的語法結構比較簡潔,所以學習起來很容易。</p><p> 由于Java語言功能強大,所以使用Java語言可以開發(fā)多種類型的應用。比如使用J2ME可以開發(fā)基于手機的應用,使用J2EE可以開發(fā)基于企
8、業(yè)級的大型應用。</p><p> 由于Java語言是基于面向對象的思想的,所以用Java語言開發(fā)出來的代碼可以具有結構清晰、維護容易和擴展簡便等優(yōu)點。</p><p> 由于Java語言的運行環(huán)境具有很強的容錯機制,能保證Java程序在諸如內(nèi)存不夠的情況下不崩潰,不死機,所以使用Java語言可以開發(fā)出健壯性的代碼。</p><p> 1.1.2 為什么要選
9、用Java語言</p><p> 由于Java具有跨平臺的特性,所以同其他編程語言相比,它更具有以下的優(yōu)勢:</p><p> 用Java可以優(yōu)化同數(shù)據(jù)庫的連接</p><p> 連接訪問數(shù)據(jù)庫是項目開發(fā)的基本需求,能實現(xiàn)數(shù)據(jù)庫訪問控制的編程語言很多,但Java語言更能根據(jù)項目的實際需求,采用適合的方式,用一種高效和安全的方式同數(shù)據(jù)庫交互。</p>
10、<p> Java采用JDBC(Java DataBase Connectivity) 提供的方法連接到數(shù)據(jù)庫上。JDBC里封裝了用Java語言讀寫數(shù)據(jù)庫的通用方法,同常見的ODBC連接數(shù)據(jù)庫的方式相比,JDBC由于具有了Java語言跨平臺的特性,不僅能同Windows平臺上的數(shù)據(jù)庫進行交互,更能方便地連接訪問構架在其他操作系統(tǒng)上的數(shù)據(jù)庫環(huán)境。此外,通過JDBC里定義的優(yōu)化查詢功能,程序員更能以高效和安全的方式
11、執(zhí)行SQL語句,操作數(shù)據(jù)庫。</p><p> 用Java可以開發(fā)具有強大功能的網(wǎng)絡應用</p><p> 現(xiàn)在網(wǎng)絡的應用涉及到各個方面中,比如我們可以在家中邊喝著咖啡,邊在網(wǎng)絡上訂購圖書,安逸的在家等著圖書送上門。又或者某個公司的老板,在家中通過Java所開發(fā)的應用程序,就可以管理公司的日常運營。</p><p> 使用Java語言,可以在不同的網(wǎng)絡環(huán)境上構
12、架一個虛擬的軟件平臺,這層平臺不僅能向用戶屏蔽不同網(wǎng)絡間的差異,更能封裝網(wǎng)絡底層的數(shù)據(jù)交換與通訊的細節(jié)。</p><p> 所以,網(wǎng)絡編程是Java語言的特長。程序員們通過Java提供的網(wǎng)絡開發(fā)類庫,不僅能快速地開發(fā)基本的Web應用項目,更能開發(fā)面向網(wǎng)絡服務的高級應用,比如能實現(xiàn)“運行異地代碼,就像在本地運行一樣的”RMI分布式應用。</p><p> 用Java語言可以連接不同硬件平
13、臺</p><p> 如果我們要實現(xiàn)手機與計算機之間的通訊和交互,這用其他編程語言的眼光來看是不可能完成的任務,因為不同硬件平臺包含了不同的操作系統(tǒng),而不同操作系統(tǒng)間的數(shù)據(jù)傳輸和存儲格式的標準是不同的。</p><p> 但使用Java語言可以輕易地實現(xiàn)這一需求。Java語言的跨平臺特性導致了Java開發(fā)出來的代碼是面向Java虛擬機的,而不是面向操作系統(tǒng),更不是面向硬件的。所以,Ja
14、va語言包含了諸如J2ME、J2EE和J2SE等開發(fā)標準,這些標準包含的類庫(即包含實現(xiàn)特定功能的jar包,類似于C語言的.h文件)能幫助程序員實現(xiàn)不同硬件平臺的連接。</p><p> 綜上所述,同其他編程語言相比,Java具有跨平臺(及其衍生)的優(yōu)勢,這些優(yōu)勢不僅能從語法架構的層次,幫助程序員改善項目開發(fā)的方式,提高項目開發(fā)的效率,更能從應用架構的層次,幫助程序員很好地實現(xiàn)“一次開發(fā),多次運行”的項目部署方
15、式。這對縮短項目開發(fā)周期,降低項目的開發(fā)和維護成本是大有好處的。</p><p> 支持Java語言的指導思想和標準很多 </p><p> 除了有面向對象思想來指導Java的開發(fā)設計外,能優(yōu)化代碼結構的設計模式原則也可以用來指導Java編程。此外,在手機開發(fā)和企業(yè)級開發(fā)領域也有較多的標準來規(guī)范和協(xié)助Java編程。在Web和數(shù)據(jù)庫領域中,有多家商業(yè)和非商業(yè)的團隊,都對Java有很好的支
16、持和擴展。</p><p> 有了這些方法論和標準的幫助,程序員們在開發(fā)Java項目時,可以較容易地得到技術和設計方面的支持。</p><p> 1.1.3 Java語言的解釋執(zhí)行與跨平臺特性</p><p> 一些編程語言(如C++)的編譯器是根據(jù)源文件,直接輸出可執(zhí)行的EXE文件。與之相比,Java 編譯器的輸出并不是可執(zhí)行的代碼,而是字節(jié)碼(byte
17、code)。</p><p> 所謂字節(jié)碼,是一套能在Java 虛擬機下執(zhí)行的高度優(yōu)化的指令集,在內(nèi)存中也只不過是1010……這樣的字節(jié)編碼。Java 虛擬機(Java Virtual Machine,JVM),從其表現(xiàn)形式來看,是一個字節(jié)碼解釋器,即可以解釋執(zhí)行字節(jié)碼定義的動作。</p><p> 從操作系統(tǒng)的級別層次來看,它是構架在不同操作系統(tǒng)上的,能屏蔽不同操作系統(tǒng)差異的基于軟件
18、的平臺。虛擬機能保證用戶看到其注重的代碼的運行結果,而向用戶屏蔽其不關心的代碼在不同操作系統(tǒng)里的執(zhí)行細節(jié)。這就好比我們在安裝完聲卡的驅動程序后,Windows操作系統(tǒng)只向我們展示聲卡的發(fā)聲效果,而不是聲卡的工作方式。</p><p> 將Java 程序解釋成字節(jié)碼,而不是最終的面向具體操作系統(tǒng)的可執(zhí)行文件,可以讓它運行在不同平臺的虛擬機上,事實上,我們只要在各種操作系統(tǒng)上都安裝不同的Java 虛擬機就可以做到這
19、點。所以,在特定的操作系統(tǒng)中,只要有支持Java功能的jar包存在,Java 程序就可以運行了。盡管不同平臺的Java 虛擬機和對應的支持jar包都是不同的(它們不應該相同),但它們的作用都是解釋并運行Java 字節(jié)碼。因此,字節(jié)碼的解釋與運行機制是保證程序能很容易地在不同操作系統(tǒng)上運行。</p><p> 圖1-1說明了虛擬機的工作方式:</p><p> 圖1.1 Java虛擬機
20、的工作方式</p><p> 從Java解釋執(zhí)行的運行機制的角度上,我們能看到其跨平臺的特性,和保證其擁有跨平臺的支持機制。</p><p> 1.1.4 怎樣學好Java</p><p> Java語言的前景非常廣闊,但是同時也請大家放心,Java的應用面很廣,但并不意味著它很難學。事實上正好相反,由于Java語言把一些復雜而煩瑣的實現(xiàn)細節(jié)封裝到了定義好的
21、功能包中,所以程序員們能以調(diào)用接口方法的方式,實現(xiàn)看上去很復雜的應用。另外,學習Java是零基礎的,大家只需要有軟件操作的經(jīng)驗,就可以由淺入深地學習Java語法和Java的技術組件。</p><p> 雖然說Java的學習不需要有軟件編程的基礎,但是,如果大家掌握了以下的學習Java的方法,就可以事半功倍地學好Java語言。</p><p> 重點關注代碼的結構,不要拘泥于語法實現(xiàn)的細
22、節(jié)</p><p> 學習語法能幫助我們更好地了解Java的特性,但學習語法的最終目的是構造功能模塊和開發(fā)項目,所以,在學習過程中,我們更應從面向對象思想的角度來觀察語法的實現(xiàn)方式,而不要拘泥于 “某函數(shù)的參數(shù)是什么含義”等細節(jié)問題。</p><p> 用面向對象的思想來指導學習過程</p><p> 面向對象思想?yún)⒄樟爽F(xiàn)實生活中觀察問題、解決問題的思維方式,
23、將應用程序中的一切模型整合成對象,并通過歸納和抽象對象,提取出一套解決問題的方法和思路。</p><p> 程序員們能使用面向對象思想構建出一系列符合規(guī)范的組件對象。通過組裝這些對象,程序員們能比較輕松地開發(fā)和擴展項目。</p><p> 所以,通過面向對象思想的指導,我們能很好地學會用Java語言構建模塊和項目的一般方式。只有有了良好的代碼結構,項目才能很好地發(fā)揮由Java語言帶來的
24、優(yōu)勢。</p><p><b> 理論與實踐相結合</b></p><p> 我們通過學習理論,能夠很好地了解Java語言的優(yōu)點和項目開發(fā)的方式,但我們更需要通過上機實踐來加深對Java語言的理解。</p><p> 事實上,我們在動手實踐中,不僅能很好地檢驗我們的理論學習成果,更能幫助我們找出自己學習上的薄弱點。另外,動手實踐過程中的糾
25、錯過程更能幫助我們在短時間內(nèi)掌握Java語言。</p><p> 多查閱資料,多尋求幫助</p><p> 在學習和開發(fā)過程中,如果我們遇到了語法或設計方面的問題,而自己又無法解決,那我們就可以從書本和網(wǎng)絡上查閱資料,幫助我們解決問題,事實上,網(wǎng)絡上的資料多而雜,如何從海量的信息中找到自己需要的,這是個問題。</p><p> 比如,我們想要知道,如何用Jav
26、a語言開發(fā)圖形界面,我們可以在www.google.com的搜索欄里輸入“Java;圖形界面開發(fā)”,經(jīng)過搜索,我們可以在網(wǎng)頁資料里得到“Swing”和“Awt”等關鍵字,通過對這些關鍵字的遞進式搜索,就可以得到需要的內(nèi)容,有時,甚至源代碼都能得到。</p><p> 1.2 什么是面向對象思想</p><p> 目前,面向對象的思想被軟件開發(fā)界廣為追捧,其實,面向對象思想不是高深的理
27、論,而是根據(jù)前人大量編程項目總結出來的一套分析和解決編程方面問題的方法。</p><p> 以面向對象思想為指導,可以優(yōu)化Java代碼的結構,更可以讓數(shù)據(jù)庫訪問模塊變得富有彈 性——即讓代碼和模塊能更好地適應項目需求的頻繁變化。</p><p> 1.2.1 軟件開發(fā)的方法學——面向對象思想提出的背景</p><p> 計算機語言剛出現(xiàn)時,采用的編
28、程語言是面向硬件的機器語言,即用一大堆計算機硬件能識別的0和1來編寫代碼。寫這種機器代碼需要很高的技巧,它們調(diào)試起來也比較困難,所以當時的程序員都是精英級別的人物。</p><p> 為了提高編程語言的適用性,提升代碼編寫的效率,專家們開發(fā)了以匯編語言為代表的低級語言,即用一些助記符來代替晦澀的機器語言,例如用add a b,來計算a+b的值。這類語言直接與內(nèi)存和其他硬件打交道,以使用最小系統(tǒng)資源和謀求最大硬件
29、利用率為開發(fā)準則,在當時低配置的硬件環(huán)境下是有很大的實用意義的。</p><p> 但是,用這種編程語言開發(fā)出來的代碼的結構非?;靵y,并且很難讀懂。這樣的情況可能在幾百行規(guī)模的代碼量下并不明顯,但如果當項目規(guī)模擴大,代碼量越來越多的時候,這個問題就突顯出來了。更有甚者,作者自己在開發(fā)結束后,往往會忘記自己寫的代碼的結構和語意,這樣的代碼很難維護和閱讀。</p><p> 為了解決這類問
30、題,提高代碼的邏輯性,軟件語言方面的專家提出了初步融合面向對象思想的結構化的面向過程語言。</p><p> 結構化語言的重要特征是,在代碼里分離了代碼邏輯和程序數(shù)據(jù),并使用了分支(IF)和循環(huán)(While和For)等關鍵字來優(yōu)化代碼的邏輯結構。由于結構化的語言使用子模塊順序調(diào)用的方式控制代碼流程,所以又叫面向過程語言,以C語言為代表。</p><p> 和匯編語言相比,面向過程語言能
31、很大程度地改善代碼結構,提高代碼的邏輯性。具體表現(xiàn)為以下兩點:</p><p> 由于在面向過程的語言里,可以把功能點以函數(shù)(過程)的形式封裝,所以代碼的重用性能會得到一定程度的提高,即后繼項目可以通過調(diào)用具有相同功能的函數(shù)來利用現(xiàn)有的代碼,這對項目的二次開發(fā)或者是功能升級是非常有利的。</p><p> 由于面向過程語言摒棄了使用goto(或者是jump)語句的跳轉方式,而使用了分支
32、和循環(huán)等結構性語句,所以代碼的結構能得到大幅度的改善,從而能在一定程度上提高項目的可讀性和可維護性。</p><p> 然而,在面向過程語言的使用過程中,程序員們發(fā)現(xiàn)其依然有本質(zhì)上的缺陷,具體表現(xiàn)為:</p><p> 在模塊間的函數(shù)調(diào)用時,由于無法屏蔽模塊里不希望被訪問修改的關鍵變量,這將導致模塊間有很高的關聯(lián)度,這對代碼維護是非常不利的,往往會修改一處而觸動全部代碼。</p&
33、gt;<p> 代碼的重用級別僅僅是局限于函數(shù)級別的,這導致無法大量有效地利用已開發(fā)完成的代碼成果,這對代碼的重復性利用非常不利。</p><p> 函數(shù)的定義是針對具體動作和具體對象的。比如說,我們要定義打印的方法,如果我們使用的打印機型號不同,那我們不得不根據(jù)不同的型號,定義多個不同名的方法。也就是說,面對業(yè)務邏輯(業(yè)務上要做的事情)相同但業(yè)務邏輯處理對象不同的需求,必須要寫成多個不同名的函
34、數(shù),這導致了代碼過于注重細節(jié),而無法考慮邏輯性、重用性和維護性等大局方面的問題。</p><p> 為了解決上述問題,軟件語言的專家們吸取面向過程語言中“結構化”和“模塊化”等優(yōu)秀方法,提出了面向對象的指導思想。</p><p> 面向對象思想?yún)⒄樟爽F(xiàn)實生活中觀察問題、解決問題的思維方式,將應用程序中的一切模型以類的形式,整合成對象,并通過歸納和抽象對象,提取出一套解決問題的方法和思路
35、。</p><p> 所以,面向對象思想可以通過優(yōu)化模塊間的結構和加固模塊間的堅固性,來指導構造軟件項目行業(yè)“摩天大樓”。</p><p> 1.2.2 面向對象的物質(zhì)基礎——類與封裝</p><p> 類是基于面向對象思想編程語言的基礎,程序員可以把具有相同業(yè)務性質(zhì)的代碼封裝到一個類里,通過接口方法向外部代碼提供服務,同時向外部代碼屏蔽類里服務的具體實現(xiàn)方
36、式。</p><p> 對象是類的實例,類一般是個抽象名詞,比如“人類”,而對象則是具體的物質(zhì)存在,比如“張三”這個人。</p><p> 在現(xiàn)實生活中,我們經(jīng)常會遇到“類”和“對象”這些概念,比如封裝了能實現(xiàn)“用微波加熱材料”功能的微波爐類。這里,用戶可以使用面板上的按鈕,使用該類里提供的加熱等服務,并且,由于該類實現(xiàn)了封裝,所以在使用的時候,用戶可以不用了解其中的微波加熱原理以及實
37、現(xiàn)機制。</p><p> 通過上面例子我們可以看出,類是對現(xiàn)實生活中真正存在的對象的描述,并且這些對象都具有共同的屬性和行為。但是,根據(jù)不同的系統(tǒng)需求,同樣的一種對象會被描述成具有不同屬性和行為的類。比如,對于銀行系統(tǒng),人的這個類應該具有賬號、存款余額的屬性和存錢、取錢的行為,每個人都有自己不同的賬號和相關金額,但是他們存錢取錢的流程是相通的;而對于電信系統(tǒng),同樣的人這個類應該具有手機號碼、卡內(nèi)余額的屬性和充
38、費、扣費的行為。因此,我們要注意類的定義和它所封裝的行為是否能夠正確的反映實際系統(tǒng)的需求。</p><p> 1.2.3 抽象與代碼復用——抽象類與概念抽象</p><p> 抽象類也是類的一種,它同樣擁有屬性和行為,但是它與普通類最大的區(qū)別就在于抽象類里面允許有一些抽象的行為,抽象類只從概念的角度出發(fā)定義了類的行為,但是它沒有描述行為的實現(xiàn)細節(jié),而是把這個任務交給了它的子類來實現(xiàn),
39、它本身充當了父類的角色。因此,我們可以說子類不僅有從父類繼承過來的屬性和行為,而且它可以在父類原有內(nèi)容的基礎上做一些補充和發(fā)揮。父類只是做了一個概念的抽象。</p><p> 下圖1-2說明了這種抽象的必要性:</p><p> 圖1-2 抽象類示意圖</p><p> 對于汽車、自行車這兩個類來說,它們都是父類車的子類,具有位置、速度屬性和前進、后退行為,
40、但是汽車有四個輪子,自行車有兩個輪子,汽車的運動是靠發(fā)動機來實現(xiàn)的,而自行車的運動是靠人力來實現(xiàn)的。因此,我們在車這個父類里面只定義了關于運動的兩個方法,具體的實現(xiàn)細節(jié)交給了它的兩個子類來完成。這樣我們不僅避免了在兩個相近的類之間定義重復的屬性和行為,而且還解決了允許不同的類具體的實現(xiàn)細節(jié)有所變化的問題。</p><p> 抽象類可以幫助我們更加有效地解決代碼重復問題,并且,它又不失靈活性,又同時達到了概念抽象
41、的目的。這里我們又通過抽象類的概念引出了類之間,一個重要關系,就是子類與父類的繼承,當然不僅抽象類可以作為父類,其他的一般類同樣可以充當為某一子類的父類。只要它有這種繼承的需求我們就可以這樣來定義。</p><p> 1.2.4 模塊的開關——接口與功能抽象</p><p> 接口的功能與抽象類相似,但是接口只能定義行為,這些行為的具體細節(jié)在實現(xiàn)了接口的類中描述,而抽象類還可以為這些
42、類定義一些相同的屬性,因此我們可以說,接口比抽象類要更加抽象。接口中只定義公共的行為,這些行為也就是實現(xiàn)它的那些類的功能,不同的類可以有不同實現(xiàn)細節(jié),這里的原理與抽象類相同。</p><p> 下圖1-3說明了接口是如何做到功能抽象的:</p><p> 圖1-3 接口示意圖</p><p> 我們定義了交通工具這個接口,在這個接口里面定義了移動這個行為,但
43、是行為的具體實現(xiàn)細節(jié)是在火車和飛機兩個類里面完成的,并且是由不同的方式來實現(xiàn)的。假設某個用戶有了一個從上海到北京的行程安排,并且由于時間緊,不能確定選擇哪一種具體的交通工具,只知道要發(fā)生移動這個行為。那么,他可以先選擇交通工具這個接口的移動行為,具體是坐火車還是坐飛機我們可以根據(jù)實際的情況來定。</p><p> 接口是單單從行為的角度出發(fā),把功能做了概念上的抽象,使得不同的類通過不同的機制實現(xiàn)名稱相同的行為,
44、方便使用者調(diào)用,隱藏了具體的實現(xiàn)細節(jié)。</p><p> 1.2.5 同名但不同參——多態(tài)與重載</p><p> 多態(tài)是面向對象編程的一個重要特征,從字面意思來看就是指具有多種形式或形態(tài)的情形。在面向對象的編程中,多態(tài)主要是指針對于類的行為有多種不同的變化,用相同的語言結構,來表示不同類型的實體或對不同類型的實體進行操作。即“相同的界面,不同的內(nèi)部實現(xiàn)形式”。通常通過重載和覆寫來實
45、現(xiàn)多態(tài)。</p><p> 重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。就是在類中可以創(chuàng)建多種行為,這些行為有一個特征是它們具有相同的名字,但具有不同的參數(shù)和不同的表現(xiàn)形式。調(diào)用行為時通過傳遞給它們的不同個數(shù)和類型的參數(shù)來決定具體使用哪個方法,這就是多態(tài)性的一種表現(xiàn),雖然行為的名字相同,但得到的是不同的表現(xiàn)形式。</p><p> 重載在我們的現(xiàn)實生活中也很常見。如:保姆類有洗的
46、這個行為,但是我們可以給她衣服或餐具等不同的對象,她會根據(jù)不同的輸入實現(xiàn)不同的洗的細節(jié),如果是衣服的話就放在盆里洗,如果是洗碗就在水池里洗。這帶來最大的好處就是對于命令的發(fā)起者主人來說不需要記住太多的洗衣服還是洗碗的方法,只要把這些臟東西交給保姆并且發(fā)出一個洗的指令,保姆就會自動地進行處理,屏蔽了細節(jié)實現(xiàn),不僅方便了主人,同時也提高了自己的價值。</p><p> 讓我們談談另外一種多態(tài)的實現(xiàn)——覆寫。還記得我
47、們上面提到過的子類和父類嗎?是的,子類不僅可以實現(xiàn)父類里面的只給出具體定義而沒有實現(xiàn)細節(jié)的行為,子類同時也可以改變父類中的行為,這個我們可以稱之為“有所繼承,有所發(fā)揮”。當你發(fā)現(xiàn)老爸那一套做法已經(jīng)落伍了的時候,你是否會去改變它呢。我們把這種在子類中改變父類行為的具體實現(xiàn)細節(jié),但是名字和接受的輸入對象不變的動作就稱之為覆寫。</p><p> 覆寫在我們的現(xiàn)實生活中同樣有著重要的意義。還拿上面的那個例子來說,原先
48、的那個保姆帶了一個徒弟,因為徒弟從師傅那里學會了如何做個好保姆,特別是如何洗東西,做保姆對于她來說可能更有優(yōu)勢。</p><p> 但是時代進步了,我們的主人家里添置了洗衣機、洗碗機等家用電器。徒弟發(fā)現(xiàn)用這些東西會更加方便,既省時又省力,于是她快速地學會了如何操作這些家用電器來為主人提供更加優(yōu)質(zhì)的服務。對于她來說同樣可以洗衣服和洗碗,只不過用的是洗衣機和洗碗機,而不是像她的師傅放在盆里或水池里洗了,并且現(xiàn)在洗得
49、更快更好了。</p><p> 對于任何一個保姆來說,主人只要給她臟東西并且發(fā)出洗的命令,她就會根據(jù)實際情況進行相應的操作,這時在這個洗的行為上發(fā)生了重載。主人把同樣的碗這個對象交給保姆師傅和保姆徒弟來洗,她們也會進行相應的操作,師傅放在水池里洗,而徒弟用洗碗機洗,此時在這個洗的行為上卻發(fā)生了覆寫。</p><p> 總結一下,類的行為可以有多種不同的表現(xiàn)形式,這叫做多態(tài)。對于那些具有
50、相同的名字但是不同操作對象的行為來說,我們稱之為重載;對于那些不僅擁有相同的名字而且操作的對象也相同,但是在子類與父類里面具有不同實現(xiàn)細節(jié)的行為來說,我們稱之為覆寫。</p><p> 在編程語言中,那些名字相同參數(shù)類型不同的方法就叫做重載,那些分別處在子類父類里面名字相同參數(shù)類型也相同的方法叫做覆寫。</p><p> 1.2.6 具有面向對象思想語言的優(yōu)勢</p>
51、<p> 傳統(tǒng)的程序設計方法稱為面向過程的程序設計方法,它是以具體的業(yè)務邏輯為基礎,以實現(xiàn)方法為主要目的。它的缺點是:程序往往缺乏對代碼重用性的支持,并且缺乏統(tǒng)一的接口, 使得當代碼的規(guī)模達到一定程度時,程序變得難以控制和管理,它的復雜性大大增加了開發(fā)人員的工作量。</p><p> 面向對象的程序設計方法以一種更接近人類一般思維的方式去看待世界,按照現(xiàn)實世界的特點來管理復雜的事物,它根據(jù)實際的情況
52、把生活中的對象抽象成相應的屬性和行為組成的實體,對象之間通過互相調(diào)用來協(xié)調(diào)工作。</p><p> 面向對象編程的基本單元是類,一個類描述了對象的特性,并把數(shù)據(jù)和操作數(shù)據(jù)的行為(稱為方法)封裝在一起。類可看成是對象的模板,基于這些模板我們可以派生出具體的對象,我們的工作就是把它們有條不紊地組織在一起。而且這樣的組織方式更加符合人類認知世界的過程。我們把現(xiàn)實世界中的事物,根據(jù)它們的特征和關系定義到了我們的系統(tǒng)中,
53、方便了操作和管理。</p><p> 面向對象的語言大大提高了程序的重用性,降低了程序的復雜度,使得計算機可以處理更復雜的應用需求。Java不僅具備面向對象語言的所有特征,而且相對于別的面向對象的語言,它還屏蔽了許多繁瑣的操作,簡化了難度,降低了開發(fā)人員的學習曲線,在面向對象的編程領域中占有舉足輕重的地位。</p><p> 1.3 開發(fā)我們的第一個Java程序 </p>
54、<p> JDK是Java語言的開發(fā)環(huán)境,它全稱是Java Development Kit,意思為“Java開發(fā)包”,在本書里,我們采用目前最新的JDK1.6版本來開發(fā)Java代碼。</p><p> 根據(jù)大多數(shù)程序員的經(jīng)驗,配置Java開發(fā)環(huán)境,特別是配置Java的Eclipse集成開發(fā)環(huán)境,不是一件特別容易的事情,所以,大家一定要先按照本章里給出的配置JDK和Eclipse等步驟,在開發(fā)環(huán)境
55、準確無誤的前提下,開始編寫我們的第一個Java代碼。</p><p> 1.3.1 如何配置Java的開發(fā)環(huán)境</p><p> 1.3.1.1 下載和安裝JDK</p><p> JDK1.6的安裝程序可以從Sun公司的網(wǎng)站http://java.sun.com/javase/downloads/index.jsp上得到,由于JDK里包含了針對不同操作系
56、統(tǒng)的Java虛擬機,所以不同的操作系統(tǒng)需要使用不同種類的JDK安裝程序。本書的所有代碼都是運行在Windows環(huán)境下,所以要下載針對Windows平臺的安裝程序。</p><p> 下載完成后,我們可以根據(jù)提示信息,開始JDK1.6的安裝。安裝的過程中,我們約定安裝在C:\Java\jdk1.6.0目錄下。安裝結束之后,安裝程序會再次要求我們確認安裝路徑,此時可以按安裝路徑C:\Java\jdk1.6.0來填寫
57、。JDK環(huán)境安裝完成之后,建議大家重新啟動電腦。安裝完成之后,我們還需要設置環(huán)境變量。</p><p> 1.3.1.2 設置JDK的環(huán)境變量</p><p> 右擊桌面上的“我的電腦”圖標,在彈出的菜單選項里選擇“屬性”,由此打開Windows系統(tǒng)的屬性頁面,在其中選擇“高級”頁簽,單擊“環(huán)境變量”按鈕,打開設置頁面,如圖1-4所示。</p><p> 圖
58、1-4 環(huán)境變量設置</p><p> 我們在“系統(tǒng)變量”的列表中尋找JAVA_HOME變量,如果沒有找到,可以通過單擊“新建”按鈕,新建JAVA_HOME變量,如圖1-5所示。</p><p> 圖1-5 新建環(huán)境變量示意圖</p><p> 現(xiàn)在我們可以配置JAVA_HOME,變量值為剛剛安裝JDK的目錄C:\Java\jdk1.6.0。用這個變量,我
59、們可以設置后面的JDK的classpath和path環(huán)境。</p><p> 按同樣的方法,我們可以分別設置Path和classpath這兩個環(huán)境變量,同樣地,如果該變量存在,則在變量值的最后添加,反之則直接添加。</p><p> 添加的Path變量值為:“%JAVA_HOME%\bin;%JAVA_HOME%\lib;”,添加完成后,如果我們在命令行里運行“Javac”等JDK命令
60、,系統(tǒng)會自動地到上述路徑里去查找Javac.exe。</p><p> 添加的classpath變量值為:“%JAVA_HOME%\lib;”,即系統(tǒng)會自動地到這個環(huán)境下查找Java的開發(fā)包。</p><p> 1.3.3.3 安裝Eclipse</p><p> 如果在開發(fā)Java項目的過程中,所有的代碼都用文本編輯器編寫,效率將會十分低下,所以,我們需要
61、一個集開發(fā)編譯運行于一體的集成開發(fā)環(huán)境。</p><p> Eclipse是Java理想的集成開發(fā)環(huán)境,它擁有非常方便的代碼編寫和編譯運行等功能,同時也可以方便地添加各種針對JSP等的擴展API包,所以是比較流行的Java開發(fā)工具。</p><p> 我們可以從Eclipse的官方網(wǎng)址http://www.eclipse.org/downloads/上獲得它的安裝包,目前最新的版本為E
62、clipse SDK 3.2.1。Eclipse同樣有多種針對不同操作系統(tǒng)的下載版本,我們這里同樣選擇Windows版本。(請大家注意,目前Windows版本并不支持最新的Vista系統(tǒng)。)</p><p> 下載之后的Eclipse安裝包是個Zip文件,它不需要安裝,直接解壓縮到指定的目即可以使用。我們約定解壓縮的目錄為:D:\eclipse目錄。解壓縮完成之后,運行D:\eclipse\eclipse.ex
63、e文件即可以啟動Eclipse程序。</p><p> Eclipse啟動之后會根據(jù)系統(tǒng)信息自動配置JDK環(huán)境,所以不用手動設置。</p><p> 1.3.3.4 添加Eclipse的中文插件</p><p> 通過剛才的方式,我們得到的是英文版的Eclipse,為了提高開發(fā)效率,我們最好需要一個中文插件包。</p><p> 在
64、網(wǎng)址http://download.eclipse.org/eclipse/downloads/下我們可以找到Eclipse的語言包“3.2.1_ Language_Packs”。</p><p> 根據(jù)提示信息,我們可以下載NLpack1-eclipse-SDK-3.2.1-win32.zip 文件。我們將其解壓為兩個文件夾:features文件夾和plugins文件夾,完成后,將這兩個文件夾里面的
65、內(nèi)容分別復制到Eclipse的對應目錄中。如果復制的時候存在同名目錄,則覆蓋它。</p><p> 復制完成之后,到D:\eclipse\configuration文件夾中,將除了config.ini 文件以外的所有文件或文件夾刪除。當我們再次重新運行Eclipse之后,就能看到中文版的開發(fā)界面了。</p><p> 1.3.2 編寫HelloWorld程序</p&g
66、t;<p> 按照剛才的步驟安裝配置完JDK環(huán)境后,我們就可以開始編寫第一個Java程序。</p><p> 我們第一個Java程序將用傳統(tǒng)的“文本編輯器”加“命令行”的開發(fā)和運行方式。雖然這有些簡陋,但只有理解了這種開發(fā)和運行的原理,我們才能更好地使用Eclipse等集成開發(fā)環(huán)境。</p><p> 我們在C盤根目錄之下建立一個“HelloWorld.java”的文件
67、,請注意這里的大小寫必須完全一致。然后用記事本或其他文本工具編輯這個文件,代碼如下:</p><p> public class HelloWorld </p><p><b> {</b></p><p> //代碼從這里開始執(zhí)行起</p><p> public static void main(String
68、[] args) </p><p><b> {</b></p><p><b> //輸出語句</b></p><p> System.out.println("Hello World");</p><p><b> }</b></p>
69、<p><b> }</b></p><p> 這段代碼主要是通過System.out.println語句,輸出Hello World語句。</p><p> 從中,我們可以看到Java語言有如下三個基本特性:</p><p> Java的所有代碼包含在一個class里,這個class是我們即將要講述的“類”,這個類名必須
70、要和文件名一致,連大小寫也要完全相同,并且,它的前綴必須是public,表示這個類是公共的。</p><p> Java代碼是從main函數(shù)開始執(zhí)行起。</p><p> 代碼里,可以用“//”來編寫注釋,如果要編寫多行注釋,可以用“/* 注釋語句 */”的方式。</p><p> 另外,我們在編寫Java代碼時,為了讓代碼具有良好的可讀性,編寫代碼的時候必須
71、要遵循體現(xiàn)在上述代碼中的良好的編碼風格,這些風格主要包括:</p><p> 類和方法必須要用{ }包含起來,并且,這對大括號必須要對齊。</p><p> 必須要注意代碼的縮進,比如編寫類里的main函數(shù)時,我們縮進了兩格,而在編寫main函數(shù)里的具體代碼時,我們同樣縮進了兩格,這樣的風格是非常利于體現(xiàn)代碼的層次關系的。</p><p> 為了讓其他讀代碼的
72、人能方便無誤地閱讀理解代碼,也為了自己日后能更方便地修改代碼,所以在代碼里要適當?shù)囟鄬扅c注釋語句。</p><p> 1.3.3 運行HelloWorld程序</p><p> 我們打開“開始菜單”,點擊其中的“運行”選項,輸入“cmd”命令,啟動命令行窗口,進入C盤根目錄,在其中依次輸入命令代碼javac HelloWorld.java。</p><p>
73、 這里,javac命令用來把java文件編譯為字節(jié)碼的.class文件,執(zhí)行完此命令后,會在C盤根目錄下出現(xiàn)HelloWorld.class文件。</p><p> 如果顯示出錯信息,請大家檢查是否在輸入程序的時候出現(xiàn)了錯誤,在確保編譯成功后,我們繼續(xù)運行java HelloWorld命令,如果在命令行里能顯示“HelloWorld”的字符,則說明我們第一個Java程序運行通過。</p><
74、p> 1.3.4 使用Eclipse集成開發(fā)環(huán)境運行HelloWorld程序</p><p> 如果我們使用Eclipse開發(fā)環(huán)境,可以更有效地開發(fā)和運行Java代碼。以剛才的Hello World程序為例,可以通過如下的步驟,在Eclipse里看到這段程序的運行結果。</p><p> ?。?)在目錄里,點擊打開Eclipse的執(zhí)行文件eclipse.exe,在彈出的“詢問工
75、作空間”的對話框里,設置代碼開發(fā)目錄,如圖1-6所示,比如是“D:\work\”。</p><p> 圖1-6 完成創(chuàng)建Java項目的示意圖</p><p> ?。?)點擊Eclipse環(huán)境里的“文件→新建→項目”菜單,進入“新建項目”的向導對話框,在其中選中“Java Project”,點擊“下一步”按鈕,在隨后彈出的對話框里,在其中的“項目名”一欄里,輸入項目名“myFirstCo
76、de”,其他的項目選擇系統(tǒng)默認值,再按“完成”按鈕,結束創(chuàng)建Java項目的動作。</p><p> (3)完成項目的創(chuàng)建工作后,選中位于集成開發(fā)環(huán)境左側的項目名“myFirstCode”,點擊右鍵,在彈出的菜單里選擇“new→class”的選項,創(chuàng)建Hello World程序代碼,如圖1-7所示。</p><p> 圖1-7 創(chuàng)建Java類的示意圖</p><p&
77、gt; 在隨后彈出的“New Java Class”對話框里,這里我們暫時使用缺省的包,并輸入文件名“HelloWorld”,在“Modifer”(也就是修飾符)里選中“public”選項,在“Which methods stubs would you like to create?”的Tab標簽下,選中“public static void main(String[] args )”單選框,同時把其他兩項目取消掉,如圖1-8所示,再
78、按“完成”按鈕,可以生成代碼。</p><p> 圖1-8 創(chuàng)建Java類的選項示意圖</p><p> (4)在生成的代碼里,我們可以看到,Eclipse環(huán)境已經(jīng)幫我們構建好了代碼的框架,我們只需在main函數(shù)里填入對應的內(nèi)容就可以了。</p><p> ?。?)編寫完代碼后,選中HelloWorld.java代碼,在Eclipse的“Run”菜單里,選中“
79、Run→運行方式→Java Application”的菜單,運行這個Java程序,如圖1-9所示。</p><p> 圖1-9 運行Java程序示意圖</p><p> 運行后,我們可以在Eclipse環(huán)境下方的控制臺里顯示如下的內(nèi)容:</p><p> Hello World</p><p> 通過比較,我們可以體驗到Eclips
80、e開發(fā)和運行Java程序的快捷性。</p><p><b> 1.4 本章小結</b></p><p> 作為《Java第一步》的第1章,本章首先以通俗易懂的語言,向大家介紹了Java的特性以及一些學習Java的方法,并在此基礎上向大家介紹了包含在Java編程語言里的指導思想——“面向對象思想”。這里我們僅僅介紹了面向對象思想里的一些設計動機和思考問題的方式,而
81、在第2章及其以后的章節(jié)里,我們將詳細講解面向對象思想同Java語言的關系,以及如何在面向對象思想的指導下設計和開發(fā)我們的Java代碼。</p><p> 最后,我們詳細地講述了安裝和配置Java開發(fā)工具的步驟,并介紹了Eclipse這一比較實用的集成環(huán)境,并在此基礎上開發(fā)和運行了我們的第一個Hello World代碼,通過這段代碼,我們可以了解Java語言的大致風格和開發(fā)與編譯的大致流程。</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java基礎和面向對象面試題
- 第1章java語言與面向對象的程序設計
- 面向對象和面向對象的高級概念
- 第1章java語言與面向對象的程序設計-唐大仕
- java面向對象總結
- java面向對象編程
- java與面向對象編程
- 并發(fā)對象模型和面向對象的petri網(wǎng).pdf
- 面向對象的java語言練習
- 《面向對象程序設計(java)》
- java面向對象考題和答案
- java面向對象測試試題
- java面向對象教程筆記01
- java-面向對象技術基礎
- 第2章c++面向對象編程
- 《java面向對象程序設計》第2版課后答案
- 09_java面向對象_講義
- 面向過程和面向對象分析方法對比研究.pdf
- 面向過程和面向對象的系統(tǒng)開發(fā)方法比較
- java的面向對象編程--------課堂筆記
評論
0/150
提交評論