大學java學習資料_第1頁
大學java學習資料_第2頁
大學java學習資料_第3頁
大學java學習資料_第4頁
大學java學習資料_第5頁
已閱讀5頁,還剩39頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

程序設計訓練復習綱要Java語言根底知識Java語言與面向?qū)ο蟮某绦蛟O計簡述面向?qū)ο蟮木幊陶Z言與以往編程語言的根本不同點面向?qū)ο蟮木幊陶Z言與以往編程語言的根本不同在于抽象機制的不同。機器語言和匯編語言幾乎沒有抽象,對于機器而言是最適宜的描述,它可以直接操作機器的硬件,并且任何操作都是面向機器的,這就要求人們在使用機器語言或匯編語言編寫程序時,必須按照機器的方式去思考問題。因為沒有抽象機制,所以程序員不得不陷入復雜的事物之中。面向過程的語言使程序員可以離開機器層次,在更抽象的層次上表達意圖。但它所關注的只是處理過程,即執(zhí)行預期計算所需要的算法。面向?qū)ο蟮木幊陶Z言將客觀事物看作具有狀態(tài)和行為的對象,通過抽象找出同一類對象的共同狀態(tài)〔靜態(tài)特征〕和行為〔動態(tài)特征〕,構成模型——類。而程序需要解決的問題便反映為各種不同屬性的對象以及對象之間的關系和消息傳遞。面向?qū)ο蟮姆椒ㄔ诔绦蛟O計領域是一種相對較新的方法,它更接近于人類處理現(xiàn)實世界問題的自然思維方法。封裝的好處封裝帶來的好處是:隱藏類的數(shù)據(jù)、控制用戶對類的修改和控制數(shù)據(jù)訪問權限面向?qū)ο蠹夹g給軟件開展帶來的益處可重用性:一個設計好的類可以在今后的程序開發(fā)中被局部或全部地重復利用??煽啃裕好恳粋€類作為一個獨立單元可以單獨進行測試、維護,大量代碼來源于可靠的類庫,因而開發(fā)新程序時新增代碼明顯減少,這是程序可靠性提高的一個重要原因。面向?qū)ο笳Z言的根本特征抽象和封裝:抽象的結果形成類,類中的數(shù)據(jù)和方法是受保護的,可以根據(jù)需要設置不同的訪問控制屬性。這便保證了數(shù)據(jù)的平安性,隱藏了方法的實現(xiàn)細節(jié),也方便了使用。繼承性:可以對已有類增加屬性和功能,或進行局部修改來建立新的類,實現(xiàn)代碼的重用。多態(tài)性:在面向?qū)ο蟮某绦蛑?,同一個消息被不同對象接收后可以導致不同的行為。Java語言的特點面向?qū)ο螅篔ava是完全面向?qū)ο蟮恼Z言。Java語言提供類的機制,在對象中封裝了成員變量和方法,實現(xiàn)了數(shù)據(jù)的封裝和信息隱藏;類提供了一類對象的模型,通過繼承和多態(tài),實現(xiàn)了代碼的復用。平安性:Java不支持指針,一切對內(nèi)存的訪問都必須經(jīng)過對象的實例變量實現(xiàn),防止了以不法手段訪問對象的私有成員,同時防止了指針操作中容易產(chǎn)生的錯誤。Java的內(nèi)部平安措施保證了Java程序在Java虛擬機規(guī)那么下操作,防止未授權的程序訪問含有專用信息的系統(tǒng)資源或危及客戶機的完整性。操作平臺無關性:Java編譯器生成與平臺無關的字節(jié)碼指令,只要安裝了Java運行系統(tǒng),其程序就可以在任意的處理器上運行。這些字節(jié)碼對應于Java虛擬機中的表示,Java解釋器得到字節(jié)碼后,對其進行解釋,使之能夠在不同的平臺下運行。不同的操作系統(tǒng)有不同的虛擬機,與平臺無關的特性使得Java程序可以方便地移植到不同的機器上。多線程:Java是第一個在語言級提供內(nèi)置多線程支持的高級語言,這大大簡化了多線程程序的編寫。而一些其他語言要通過調(diào)用操作系統(tǒng)的原語來支持多線程。動態(tài)內(nèi)存分配:Java中所有的對象都是通過動態(tài)內(nèi)存分配建立的,Java對內(nèi)存自動進行管理并進行垃圾回收,防止了因程序員失誤而導致的內(nèi)存分配錯誤,進而更好地利用了系統(tǒng)資源。Java程序概述Java程序編譯執(zhí)行的過程首先把源文件〔.java文件〕編譯成字節(jié)碼文件,即類文件〔.class〕;然后由解釋器負責解釋執(zhí)行類文件。Java平臺Java平臺包括Java應用程序接口〔API〕和Java虛擬機〔Javavirtualmachine,JVM〕。Java應用程序接口是指經(jīng)過編譯的,可在程序中直接使用的Java代碼標準庫。Java虛擬機負責解釋和執(zhí)行Java程序。Java程序運行于Java平臺之上,Java虛擬機將程序和硬件隔離開來。根本數(shù)據(jù)類型與表達式變量的作用域變量的作用域指可以訪問該變量的程序代碼范圍。按照作用域的不同,變量可以分為類成員變量和局部變量。類成員變量在類的聲明體中聲明,其作用域為整個類;局部變量在方法體或方法的代碼塊中聲明,其作用域為它所在的代碼塊〔即花括號{}的范圍〕。根本數(shù)據(jù)類型〔根本數(shù)據(jù)類型有幾種?分別是什么?〕根本數(shù)據(jù)類型是指Java固有的數(shù)據(jù)類型,可以分為數(shù)字型、布爾型和字符型數(shù)字型根本數(shù)據(jù)類型有六種,其說明如下表:char類型說明長度最小值最大值byte帶符號位整數(shù)8位-128127short帶符號短整數(shù)16位-215215-1int帶符號整數(shù)32位-231231-1long帶符號長整數(shù)64位-263263-1float單精度浮點數(shù)32位2-149(2-2-23).2127double雙精度浮點數(shù)64位2-1074(2-2-52).21023布爾型數(shù)據(jù)表示一個邏輯量,只有兩個值true和false,它們不對應于任何整數(shù)值。字符類型數(shù)據(jù)用于存儲單個字符,字符以代碼形式存儲。Java字符數(shù)據(jù)類型是16位,最小值0,最大值65535,放置Unicode符號。類型轉換的分類類型轉換可以分成擴展轉換和窄化轉換兩類。byte,short,int,long,float,double

char擴展double,float,long,int,short,byte,char窄化按照擴展方向轉化,從一種整型轉換到另一種整型,或者從float轉換到double時,不損失任何信息。從整型轉換到float或者double將損失精度。窄化轉換可能會喪失信息。發(fā)生類型轉換的四種可能情況賦值轉換方法調(diào)用轉換強制類型轉換字符串轉換數(shù)組的概念數(shù)組的概念數(shù)組是由同類型的數(shù)據(jù)元素構成的一種數(shù)據(jù)結構。數(shù)據(jù)元素可以是根本數(shù)據(jù)類型也可以是引用類型。通過數(shù)組名和數(shù)組元素下標〔或稱為索引〕可以引用數(shù)組中的元素。每個數(shù)組都有一個名為length的成員變量,用來表示數(shù)組所包含的元素的個數(shù),length只能是正整數(shù)或零。數(shù)組創(chuàng)立之后length就不能被改變。數(shù)組的創(chuàng)立和引用圖示下面創(chuàng)立并初始化一個三行的二維數(shù)組的過程int[][]myArray;myArray=newint[3][];myArray[0]=newint[3];int[]x={0,2};int[]y={0,1,2,3,4};myArray[1]=x;myArray[2]=y;類與對象的根本概念面向?qū)ο蟮某绦蛟O計方法概述抽象抽象就是忽略問題中與當前目標無關的那些內(nèi)容,以便更充分地注意與當前目標有關的方面。計算機軟件開發(fā)中所使用的抽象有過程抽象及數(shù)據(jù)抽象兩類。過程抽象將整個系統(tǒng)的功能劃分為假設干局部,強調(diào)功能完成的過程和步驟,而隱藏其具體的實現(xiàn)?;谶^程抽象的兩個標準程序設計技術是過程分解及遞歸技術。數(shù)據(jù)抽象是將系統(tǒng)中需要處理的數(shù)據(jù)和這些數(shù)據(jù)上的操作結合在一起,抽象成不同的抽象數(shù)據(jù)類型,每個抽象數(shù)據(jù)類型既包含了數(shù)據(jù),也包含了針對這些數(shù)據(jù)的操作。相對于過程抽象,數(shù)據(jù)抽象是更為合理的抽象方法。面向?qū)ο蟮能浖_發(fā)方法的主要特點之一就是采用了數(shù)據(jù)抽象的方法來構建程序的類及對象。封裝封裝是一種信息隱蔽技術,就是利用抽象數(shù)據(jù)類型將數(shù)據(jù)和基于數(shù)據(jù)的操作封裝在一起。用戶只能看到對象的封裝界面信息,對象的內(nèi)部細節(jié)對用戶是隱蔽的。封裝的目的在于將對象的使用者和設計者分開,使用者不必知道行為實現(xiàn)的細節(jié),只需使用設計者提供的消息來訪問對象。繼承繼承是指新的類可以獲得已有類〔稱為超類、基類或父類〕的屬性和行為,稱新類為已有類的派生類〔也稱為子類〕。在繼承過程中派生類繼承了基類的特性,包括方法和實例變量。派生類也可修改繼承的方法或增加新的方法,使之更適合特殊的需要。繼承有助于解決軟件的可重用性問題,使程序結構清晰,降低了編碼和維護的工作量。單繼承任何一個派生類都只有單一的直接父類,類層次結構為樹狀結構。多繼承一個類可以有一個以上的直接父類,類層次結構為網(wǎng)狀結構,設計及實現(xiàn)比擬復雜。多態(tài)多態(tài)是指一個程序中同名的不同方法共存,主要通過子類對父類方法的覆蓋來實現(xiàn)。不同類的對象可以響應同名的消息(方法),具體的實現(xiàn)方法卻不同。多態(tài)性使語言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢,很好地解決了應用程序方法同名問題。類與對象類和對象一個類是對一類對象的描述。類是構造對象的模板,對象是類的具體實例類的聲明語法格式[public][abstract|final]class類名稱[extends父類名稱][implements接口名稱列表]{變量成員聲明及初始化;方法聲明及方法體;}說明:class:說明其后聲明的是一個類extends:如果所聲明的類是從某一父類派生而來,那么,父類的名字應寫在extends之后implements:如果所聲明的類要實現(xiàn)某些接口,那么,接口的名字應寫在implements之后修飾符可以有多個,用來限定類的使用方式public:說明此類為公有類abstract:指明此類為抽象類final:指明此類為終結類對象的創(chuàng)立生成實例的格式:new<類名>()其作用是:在內(nèi)存中為此對象分配內(nèi)存空間,返回對象的引用〔reference,相當于對象的存儲地址〕。數(shù)據(jù)成員數(shù)據(jù)成員表示Java類的狀態(tài)。聲明數(shù)據(jù)成員必須給出變量名及其所屬的類型,同時還可以指定其他特性。在一個類中成員變量名是唯一的。數(shù)據(jù)成員的類型可以是Java中任意的數(shù)據(jù)類型〔簡單類型,類,接口,數(shù)組〕。分為實例變量和類變量。數(shù)據(jù)成員的聲明格式:[public|protected|private][static][final][transient][volatile]變量數(shù)據(jù)類型變量名1[=變量初值],變量名2[=變量初值],…;格式說明public、protected、private為訪問控制符static指明這是一個靜態(tài)成員變量final指明變量的值不能被修改transient指明變量是臨時狀態(tài)volatile指明變量是一個共享變量實例變量沒有static修飾的變量稱為實例變量〔InstanceVariables〕。用來存儲所有實例都需要的屬性信息,不同實例的屬性值可能會不同。可通過下面的表達式訪問實例屬性的值<實例名>.<實例變量名>類變量類變量也稱為靜態(tài)變量,聲明時需加static修飾符。不管類的對象有多少,類變量只存在一份,在整個類中只有一個值。類初始化的同時就被賦值。適用情況:類中所有對象都相同的屬性經(jīng)常需要共享的數(shù)據(jù)系統(tǒng)中用到的一些常量值引用格式:<類名|實例名>.<類變量名>方法成員方法成員定義類的行為:一個對象能夠做的事情我們能夠從一個對象取得的信息可以沒有,也可以有多個;一旦在類中聲明了方法,它就成為了類聲明的一局部。分為實例方法和類方法聲明格式:[public|protected|private][static][final][abstract][native][synchronized]返回類型方法名([參數(shù)列表])[throwsexceptionList]{方法體}格式說明:方法修飾public、protected、private為存取控制符static指明方法是一個類方法final指明方法是一個終結方法abstract指明方法是一個抽象方法native用來集成java代碼和其它語言的代碼synchronized用來控制多個并發(fā)線程對共享數(shù)據(jù)的訪問返回類型方法返回值的類型,可以是任意的Java數(shù)據(jù)類型當不需要返回值時,返回類型為void參數(shù)類型簡單數(shù)據(jù)類型,引用類型(數(shù)組、類或接口)可以有多個參數(shù),也可以沒有參數(shù),方法聲明時的參數(shù)稱為形式參數(shù)throwsexceptionList用來處理異常包的作用將相關的源代碼文件組織在一起;不同包中的類名可以相同,從而可以防止名字沖突;提供包一級的封裝及存取權限。編譯單元的組成所屬包的聲明〔省略,那么屬于默認包〕;Import〔引入〕包的聲明,用于導入外部的類;類和接口的聲明。類的訪問控制類的訪問控制只有public〔公共類〕及無修飾符〔缺省類〕兩種訪問權限符與訪問能力之間的關系如表類型無修飾public同一包中的類yesyes不同包中的類noyes類成員的訪問控制類型private無修飾protectedpublic同一類yesyesyesyes同一包中的子類noyesyesyes同一包中的非子類noyesyesyes不同包中的子類nonoyesyes不同包中的非子類nononoyes關鍵字this的使用super如果形式參數(shù)名與實例變量名相同,那么需要在實例變量名之前加this關鍵字,否那么系統(tǒng)會將實例變量當成形式參數(shù)。對象的初始化和回收構造方法構造方法〔Constructor〕是一種特殊的方法。Java中的每個類都有構造方法,用來初始化該類的一個新的對象。構造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型。系統(tǒng)在產(chǎn)生對象時會自動執(zhí)行。構造方法的特點〔簡述構造方法的特點〕構造方法的方法名與類名相同;構造方法沒有返回類型〔修飾符void也不能有〕;構造方法通常被聲明為公有的〔public〕;構造方法可以有任意多個參數(shù);構造方法的主要作用是完成對象的初始化工作;構造方法不能在程序中顯式的調(diào)用;在生成一個對象時,系統(tǒng)會自動調(diào)用該類的構造方法為新生成的對象初始化。應用舉例UML簡介類的方法方法的控制流程Java中的流程控制Java中的流程控制主要有順序結構、選擇結構和循環(huán)結構三種。順序結構即是按照從上到下的順序執(zhí)行語句,沒有轉移和重復。選擇結構是根據(jù)給定的條件成立與否,執(zhí)行不同的語句或語句組。Java的選擇結構主要有二路選擇結構〔if選擇結構〕及多路選擇結構〔switch選擇結構〕兩種。循環(huán)控制結構是在一定的條件下,反復執(zhí)行某段程序的流程結構,被反復執(zhí)行的程序稱為循環(huán)體。循環(huán)包括幾個局部初始化局部:用來設置循環(huán)的一些初始條件,如計數(shù)器清零等。循環(huán)體局部:這是反復執(zhí)行的一段代碼,可以是單一的一條語句,也可以是復合語句。迭代局部:這是當前循環(huán)結束,下次循環(huán)開始執(zhí)行的語句,常常用來使計數(shù)器進行增減操作。終止局部:通常是布爾表達式,每一次循環(huán)要對該表達式求值,以驗證是否滿足循環(huán)終止條件。break語句的用法break語句可用于三種情況:在switch結構中,break語句用來終止switch語句的執(zhí)行。在for循環(huán)及while循環(huán)結構中,用于終止break語句所在的最內(nèi)層循環(huán)。break語句也可用在代碼塊中,用于跳出它所指定的塊。break與label一同使用舉例publicclassExamp3_7{ publicstaticvoidmain(String[]args){ outer: for(inti=1;i<=9;i++){ for(intj=1;j<=9;j++){if(j>i)break;if(i==6)breakouter;System.out.print(""+i+"*"+j+"="+i*j);}System.out.println(); }}}continue語句的用法continue語句必須用于循環(huán)結構中,continue語句有兩種使用格式:不帶標號的continue語句。它的作用是終止當前這一輪循環(huán),跳出本輪循環(huán)剩余的語句,直接進入當前循環(huán)的下一輪。在while或do-while循環(huán)中,不帶標號的continue語句會使流程直接跳轉至條件表達式;在for循環(huán)中,不帶標號的continue語句會跳轉至表達式update-expression,計算并修改循環(huán)變量后再判斷循環(huán)條件。帶標號的continue語句。帶標號的continue語句使程序的流程直接轉入標號標明的循環(huán)層次。帶標號的continue語句舉例publicclassExamp3_10{ publicstaticvoidmain(Stringargs[]){ outer: for(inti=1;i<10;i++){ inner: for(intj=1;j<10;j++){ if(i<j){System.out.println(); continueouter; } System.out.print(""+i+"*"+j+"="+i*j); } } }}求出100以內(nèi)的素數(shù),并將這些數(shù)在屏幕上5個一行地顯示出來。publicclassprimeIn100{

publicvoidprime(){

intcount=0;

Outer:

for(inti=2;i<100;i++){

for(intj=2;j<=Math.floor(Math.sqrt(i));j++){

if(i%j==0)continueOuter;

}

System.out.print(i+" ");

count++;

if(count%5==0)System.out.println();

}

}

publicstaticvoidmain(Stringargs[]){

primeIn100p=newprimeIn100();

p.prime();

}

}異常處理簡介異常的根本概念又稱為例外,是特殊的運行錯誤對象,是面向?qū)ο髽藴实囊痪植?,是異常類的對象。Java中聲明了很多異常類,每個異常類都代表了一種運行錯誤,類中包含了該運行錯誤的信息和處理錯誤的方法。每當Java程序運行過程中發(fā)生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應時,系統(tǒng)都會產(chǎn)生一個相應的該異常類的對象,即產(chǎn)生一個異常。錯誤的分類通常程序中的錯誤可以分成三類,即編譯錯誤、運行錯誤和邏輯錯誤。Java系統(tǒng)中根據(jù)錯誤的嚴重程度不同,將錯誤分為兩類:錯誤:是致命性的,即程序遇到了非常嚴重的不正常狀態(tài),不能簡單地恢復執(zhí)行。異常:是非致命的,通過某種修正后程序還能繼續(xù)執(zhí)行。異常的拋出和捕獲當程序中發(fā)生異常時,稱程序產(chǎn)生了一個異常事件,相應地生成異常對象。生成的異常對象傳遞給Java運行時系統(tǒng)。異常的產(chǎn)生和提交的這一過程稱為拋出。異常發(fā)生時,Java運行時系統(tǒng)從生成對象的代碼開始,沿方法的調(diào)用棧逐層回溯,尋找相應的處理代碼,并把異常對象交給該方法處理,這一過程稱為捕獲。異常的處理對于檢查型異常,Java強迫程序必須進行處理,處理方法有以下兩種:聲明拋出異常:不在當前方法內(nèi)處理異常,而是把異常拋出到調(diào)用方法中。捕獲異常:使用try{}catch(){}塊,捕獲到所發(fā)生的異常,并進行相應的處理。用戶自定義異常用戶自定義的異常類都必須是Exception的子類。一般的聲明方法如下:publicclassMyExceptionNameextendsSuperclassOfMyException{ publicMyExceptionName(){ super("Somestringexplainingtheexception"); }}方法的重載方法的重載方法的重載〔overloading〕是指在一個類中可以有名字相同的多個方法,但這些方法的參數(shù)必須不同,或者是參數(shù)個數(shù)不同,或者是參數(shù)類型不同。返回值可以相同,也可以不同。類的重用類的繼承繼承繼承是一種由已有的類創(chuàng)立新類的機制,是面向?qū)ο蟪绦蛟O計的基石之一。一個新類可以從現(xiàn)有的類中派生,這個過程稱為類繼承。派生出的新類稱為已有類的子類,已有類稱為超類〔父類〕。屬性的隱藏子類對從父類繼承來的屬性變量重新加以定義,那么從父類繼承的屬性將被隱藏。訪問被隱藏的父類域有兩種方法:調(diào)用從父類繼承的方法,那么操作的是從父類繼承的域;使用super.域名屬性隱藏的例子classA1{intx=2;publicvoidsetx(inti){x=i;}voidprinta(){System.out.println(x);}}classB1extendsA1{intx=100;voidprintb(){super.x=super.x+10;System.out.println("super.x="+super.x+"x="+x);}}publicclassExam4_4Test{publicstaticvoidmain(String[]args){A1a1=newA1();a1.setx(4);a1.printa();B1b1=newB1();b1.printb();b1.printa();b1.setx(6);//將繼承來的x值設置為6b1.printb();b1.printa();a1.printa();}}運行結果:4super.x=12x=10012super.x=16x=100164方法的覆蓋如果子類不需要使用從父類繼承來的方法的功能,那么可以聲明自己的方法。在聲明的時候,使用相同的方法名及參數(shù)表,但執(zhí)行不同的功能。這種情況稱為方法覆蓋。需要使用方法覆蓋的情況子類中實現(xiàn)與父類相同的功能,但采用不同的算法或公式。在名字相同的方法中,要做比父類更多的事情。有繼承時的構造方法應遵循的原那么子類不能從父類繼承構造方法。好的程序設計方法是在子類的構造方法中調(diào)用某一個父類構造方法。super關鍵字也可以用于構造方法中,其功能為調(diào)用父類的構造方法。如果在子類的構造方法的聲明中沒有明確調(diào)用父類的構造方法,那么系統(tǒng)在執(zhí)行子類的構造方法時會自動調(diào)用父類的默認構造方法。如果在子類的構造方法的聲明中調(diào)用父類的構造方法,那么調(diào)用語句必須是子類的構造方法的第一條語句。子類將繼承父類所有的屬性和方法嗎?為什么?方法的覆蓋與方法的重載有何不同?完成下面父類及子類的聲明:聲明Student類屬性包括學號、姓名、英語成績、數(shù)學成績、計算機成績和總成績。方法包括構造方法、get方法、set方法、toString方法、equals方法、compare方法〔比擬兩個學生的總成績,結果分為大于、小于、等于〕、sum方法〔計算總成績〕和testScore方法〔計算評測成績〕。注:評測成績可以取三門課成績的平均分,另外任何一門課的成績的改變都需要對總成績進行重新計算,因此,在每一個set方法中應調(diào)用sum方法計算總成績。聲明StudentXW〔學習委員〕類為Student類的子類。在StudentXW類中增加責任屬性,并重寫testScore方法〔計算評測成績,評測成績=三門課的平均分+3〕。聲明StudentBZ〔班長〕類為Student類的子類。在StudentBZ類中增加責任屬性,并重寫testScore方法〔計算評測成績,評測成績=三門課的平均分+5〕。聲明測試類,生成假設干個Student類、StudentXW類及StudentBZ類對象,并分別計算它們的評測成績。Object類Object類Object類是Java程序中所有類的直接或間接父類,也是類庫中所有類的父類,處在類層次的最高點。相等和同一如果兩個對象具有相同的類型及相同的屬性值,那么稱兩個對象相等〔equal〕;如果兩個引用變量指向的是同一個對象,那么稱這兩個變量〔對象〕同一〔identical〕。Object類中的equals()方法的功能Object類中的equals()方法的功能是比擬接收者對象與參數(shù)對象是否是同一個對象,而不是判斷兩個對象各個屬性域的值是否相同。終結類與終結方法終結類如果一個類被final修飾符所修飾和限定,說明這個類不可能有子類,即final類不能有派生類。被聲明為final的類通常是一些有固定作用、用來完成某種標準功能的類,不能被繼承以到達修改的目的。在Java程序設計中,當引用一個類或其對象時實際真正引用的既可能確是這個類或其對象本身,也可能是這個類的某個子類及子類對象,即具有一定的不確定性。將一個類聲明為final,那么可以將它的內(nèi)容、屬性和功能固定下來,與它的類名形成穩(wěn)定的映射關系,從而保證引用這個類時所實現(xiàn)功能的正確無誤。final類存在的兩個理由平安方面:黑客用來攪亂系統(tǒng)的一個手法是建立一個類的派生類,然后用他們的類代替原來的類。為了阻止各種顛覆活動,可以聲明此類為final類,從而不能派生任何子類。設計方面:從面向?qū)ο笤O計方面,如希望聲明的類為最終類,那么最好或從概念上講該類不應該有任何派生類。終結方法final修飾符所修飾的方法是功能和內(nèi)部語句不能被更改的最終方法,即是不能被當前類的子類重載的方法。這樣,就固定了這個方法所對應的具體操作,可以防止子類對父類關鍵方法的錯誤重寫,增加了代碼的平安性和正確性。將方法聲明為final的另一個原因是提高類的運行效率。通常,當Java運行環(huán)境運行方法時,它將首先在當前類中查找該方法,接下來在其超類中查找,并一直沿類層次向上查找,直到找到該方法為止。這提供了靈活性和開發(fā)工作的容易程度,但代價是速度更低。如果方法是final的,Java編譯器可以將該方法可執(zhí)行的字節(jié)碼直接放到調(diào)用它的程序中。這樣當程序調(diào)用它們時,執(zhí)行速度將更快。抽象類抽象類抽象類不能用new方法進行實例化。當一個類被聲明抽象類時,要在這個類前加修飾符abstract。抽象類可以包含常規(guī)類能夠包含的任何東西,這包括構造方法。抽象類也可以包括抽象方法,這種方法只有方法的聲明,而沒有方法的實現(xiàn)。抽象類也可以包含非抽象方法,但不能在非抽象類中聲明抽象方法。為什么要聲明抽象類?抽象類是類層次中較高層次的概括,抽象類的作用是讓其他類來繼承它的抽象化特征;在抽象類中可以包括被它的所有子類共享的公共行為;抽象類可以包括被它的所有子類共享的公共屬性;在程序中不能用抽象類作為模板來創(chuàng)立對象;在用戶生成實例時強迫用戶生成更具體的實例,保證代碼的平安性。抽象方法作為類方法修飾符,abstract聲明了一種僅有方法頭,而沒有具體的方法體和操作實現(xiàn)的抽象方法,為該類的子類聲明一個方法的接口標準。抽象方法體的具體實現(xiàn)是由當前類的不同子類在它們各自的類聲明中完成的。抽象方法的優(yōu)點抽象方法可以隱藏具體的細節(jié)信息,使調(diào)用該方法的程序不必過分關注該類和它的子類的內(nèi)部狀況。方法頭里實際包含了調(diào)用該方法的程序語句所需要了解的全部信息。抽象方法強迫子類完成指定的行為,抽象類的所有非抽象子類都必須完成其父類中聲明的抽象方法,抽象類通常聲明抽象方法規(guī)定其子類需要用到的“標準〞行為。編寫一程序計算二維幾何形體的面積,所涉及的幾何形體至少應包括圓、三角形、矩形。〔類層次結構圖參見圖4-11〕類的組合組合Java的類中可以有其它類的對象作為成員,這便是類的組合。可以使用“hasa〞語句來描述這種關系。組合與繼承的比擬“包含〞關系用組合來表達如果想利用新類內(nèi)部一個現(xiàn)有類的特性,而不想使用它的接口,通常應選擇組合,我們需在新類里嵌入現(xiàn)有類的private對象。如果想讓類用戶直接訪問新類的組合成分,需要將成員對象的屬性變?yōu)閜ublic?!皩儆讪曣P系用繼承來表達取得一個現(xiàn)成的類,并制作它的一個特殊版本。通常,這意味著我們準備使用一個常規(guī)用途的類,并根據(jù)特定需求對其進行定制。組合與繼承舉例classPlate{//聲明盤子 publicPlate(inti){ System.out.println("Plateconstructor"); }}classDinnerPlateextendsPlate{//聲明餐盤為盤子的子類 publicDinnerPlate(inti){ super(i); System.out.println("DinnerPlateconstructor"); }}classUtensil{//聲明器具 Utensil(inti){ System.out.println("Utensilconstructor"); }}classSpoonextendsUtensil{//聲明勺子為器具的子類 publicSpoon(inti){ super(i); System.out.println("Spoonconstructor"); }}classForkextendsUtensil{//聲明餐叉為器具的子類 publicFork(inti){ super(i); System.out.println("Forkconstructor"); }}classKnifeextendsUtensil{//聲明餐刀為器具的子類 publicKnife(inti){ super(i); System.out.println("Knifeconstructor"); }}classCustom{//聲明做某事的習慣 publicCustom(inti){System.out.println("Customconstructor");}}publicclassPlaceSettingextendsCustom{//聲明餐桌的布置 Spoonsp;Forkfrk;Knifekn; DinnerPlatepl; publicPlaceSetting(inti){ super(i+1); sp=newSpoon(i+2); frk=newFork(i+3); kn=newKnife(i+4); pl=newDinnerPlate(i+5); System.out.println("PlaceSettingconstructor"); } publicstaticvoidmain(String[]args){ PlaceSettingx=newPlaceSetting(9); }}包的應用包為了解決類名沖突,Java利用包來組織相關的類,并控制訪問權限。包是一種松散的類的集合。但是由于同一包中的類在默認情況下可以互相訪問,所以為了方便編程和管理,通常把需要在一起工作的類放在一個包里。利用包來管理類,可實現(xiàn)類的共享與復用。語言包語言包java.lang提供了Java語言最根底的類,包括Object類、數(shù)據(jù)類型包裹類、字符串類〔String、StringBuffer〕、數(shù)學類〔Math〕、系統(tǒng)和運行時類〔System、Runtime〕、類操作類〔Class、ClassLoader〕等實用包實用包java.util提供了實現(xiàn)各種不同實用功能的類,包括日期類、集合類等。文本包文本包java.text中的Format、DateFormat、SimpleDateFormat等類提供各種文本或日期格式。接口與多態(tài)接口接口接口與抽象類一樣都是定義多個類的共同屬性。接口使抽象的概念更深入了一層,是一個“純〞抽象類,它只提供一種形式,并不提供實現(xiàn)。允許創(chuàng)立者規(guī)定方法的根本形式:方法名、參數(shù)列表以及返回類型,但不規(guī)定方法主體。接口也可以包含根本數(shù)據(jù)類型的數(shù)據(jù)成員,但它們都默認為static和final。接口的作用接口是面向?qū)ο蟮囊粋€重要機制。它的引進是為了實現(xiàn)多繼承,同時免除C++中的多繼承那樣的復雜性。在使用中,接口類的變量可以用來代表任何實現(xiàn)了該接口的類的對象,這就相當于把類根據(jù)其實現(xiàn)的功能來分別代表,而不必顧慮它所在的類繼承層次。這樣可以最大限度地利用動態(tài)綁定,隱藏實現(xiàn)細節(jié)。接口還可以實現(xiàn)不同類之間的常量共享。聲明接口類型的變量,并用它來訪問對象舉例interfaceShape2D{doublepi=3.14;doublearea();}classCircleimplementsShape2D{doubleradius;publicCircle(doubler){radius=r;}publicdoublearea(){return(pi*radius*radius);}}classRectangleimplementsShape2D{intwidth,height;publicRectangle(intw,inth){width=w;height=h;}publicdoublearea(){return(width*height);}}publicclassVariableTester{ publicstaticvoidmain(String[]args) { Shape2Dvar1,var2; var1=newRectangle(5,6); System.out.println("Areaofvar1="+var1.area()); var2=newCircle(2.0); System.out.println("Areaofvar2="+var2.area()); }}輸出結果Areaofvar1=30.0Areaofvar2=12.56多重繼承Java不允許一個類有多個父類,但允許一個類實現(xiàn)多個接口,通過這種機制可以實現(xiàn)多重繼承。多重繼承舉例interfaceShape2D{//聲明Shape2D接口finaldoublepi=3.14;//數(shù)據(jù)成員一定要初始化publicabstractdoublearea();//抽象方法}interfaceColor{voidsetColor(Stringstr);//抽象方法}classCircleimplementsShape2D,Color//實現(xiàn)Circle類{doubleradius;Stringcolor;publicCircle(doubler)//構造方法{radius=r;}publicdoublearea()//定義area()的處理方式{return(pi*radius*radius);}publicvoidsetColor(Stringstr)//定義setColor()的處理方式{color=str;System.out.println("color="+color);}}publicclassMultiInterfaceTester{publicstaticvoidmain(Stringargs[]){Circlecir;cir=newCircle(2.0);cir.setColor("blue");System.out.println("Area="+cir.area());}}輸出結果color=blueArea=12.56接口的擴展接口可以通過擴展〔extends〕技術派生出新的接口,原來的接口稱為根本接口〔baseinterface〕或父接口〔superinterface〕,派生出的接口稱為派生接口〔derivedinterface〕或子接口〔subinterface〕。派生接口不僅可以保有父接口的成員,同時也可以參加新的成員以滿足實際問題的需要。接口擴展舉例interfaceShape{doublepi=3.14;voidsetColor(Stringstr);}//聲明Shape2D接口擴展了Shape接口interfaceShape2DextendsShape{doublearea();}classCircleimplementsShape2D{doubleradius;Stringcolor;publicCircle(doubler){radius=r;}publicdoublearea(){return(pi*radius*radius);}publicvoidsetColor(Stringstr){color=str;System.out.println("color="+color);}}publicclassExtendsInterfaceTester{//測試類publicstaticvoidmain(String[]args){Circlecir;cir=newCircle(2.0);cir.setColor("blue");System.out.println("Area="+cir.area());}}運行結果color=blueArea=12.56塑型對象的塑型類型轉換也稱為塑型。對象只能被塑型為:任何一個父類類型。任何一個子類的引用變量〔或?qū)ο蟆扯伎梢员划敵筛割愐米兞俊不驅(qū)ο蟆硜韺Υ坏催^來卻不成立。對象所屬的類實現(xiàn)的一個接口。雖然不能用接口生成對象,但可以聲明接口的引用變量,接口的引用變量可以指向任何實現(xiàn)了此接口的類對象?;蛘呋氐剿约核诘念?。一個對象被塑型為父類或接口后,還可以再被塑型回到它自己所在的類。在什么情況下,可以對父類對象的引用進行強制類型轉換,使其轉化成子類對象的引用?塑型的應用場合塑型主要應用于:賦值轉換賦值號右邊的表達式類型或?qū)ο筠D換為左邊的類型方法調(diào)用轉換實參的類型轉換為形參的類型算術表達式轉換算術混合運算時,不同類型的項轉換為相同的類型再進行運算字符串轉換字符串連接運算時,如果一個操作數(shù)為字符串,一個操作數(shù)為數(shù)值型,那么會自動將數(shù)值型轉換為字符串實例方法查找舉例類層次如下列圖:Manager

man=newManager();Employee

emp1=newEmployee();Employee

emp2=(Employee)man;emp1putePay();//調(diào)用Employee類中的computePay()方法manputePay();

//調(diào)用Manager類中的computePay()方法emp2putePay();//調(diào)用Manager類中的computePay()方法多態(tài)的概念多態(tài)多態(tài)性是指不同的類型的對象可以響應相同的消息。動態(tài)綁定舉例classShape{voiddraw(){}voiderase(){}}classCircleextendsShape{ voiddraw(){System.out.println("Circle.draw()");} voiderase(){System.out.println("Circle.erase()");}}classSquareextendsShape{ voiddraw(){System.out.println("Square.draw()");} voiderase(){System.out.println("Square.erase()");}}classTriangleextendsShape{ voiddraw(){System.out.println("Triangle.draw()");}voiderase(){System.out.println("Triangle.erase()");}}publicclassBindingTester{publicstaticvoidmain(String[]args){Shape[]s=newShape[9];intn;for(inti=0;i<s.length;i++){n=(int)(Math.random()*3);switch(n){case0:s[i]=newCircle();break;case1:s[i]=newSquare();break;case2:s[i]=newTriangle();}}for(inti=0;i<s.length;i++)s[i].draw();}}將上例中,如果將Shape改為如下的抽象類,能否得到正確的結果?abstractclassShape{ abstractvoiddraw(); abstractvoiderase();}多態(tài)的應用構造方法與多態(tài)構造方法的調(diào)用順序舉例classMeal{//飯類Meal(){System.out.println("Meal()");}}classBread{//面包類Bread(){System.out.println("Bread()");}}classCheese{//奶酪類Cheese(){System.out.println("Cheese()");}}classLettuce{//萵苣類Lettuce(){System.out.println("Lettuce()");}}classLunchextendsMeal{//午餐類繼承自飯類Lunch(){System.out.println("Lunch()");}}classPortableLunchextendsLunch{PortableLunch(){System.out.println("PortableLunch()");}}publicclassSandwichextendsPortableLunch{Breadb=newBread();Cheesec=newCheese();Lettucel=newLettuce();Sandwich(){System.out.println("Sandwich()");}publicstaticvoidmain(String[]args){newSandwich();}}輸出結果:Meal()Lunch()PortableLunch()Bread()Cheese()Lettuce()Sandwich()構造方法中的多態(tài)方法舉例abstractclassGlyph{abstractvoiddraw();Glyph(){System.out.println("Glyph()beforedraw()");draw();System.out.println("Glyph()afterdraw()");}}classRoundGlyphextendsGlyph{intradius=1;RoundGlyph(intr){radius=r;System.out.println("RoundGlyph.RoundGlyph(),radius="+radius);}voiddraw(){System.out.println("RoundGlyph.draw(),radius="+radius);}}publicclassPolyConstructors{publicstaticvoidmain(String[]args){newRoundGlyph(5);}}運行結果Glyph()beforedraw()RoundGlyph.draw(),radius=0Glyph()afterdraw()RoundGlyph.RoundGlyph(),radius=5定義構造方法時應遵循的原那么用盡可能少的動作把對象的狀態(tài)設置好。如果可以防止,不要調(diào)用任何方法。在構造方法內(nèi)唯一能夠平安調(diào)用的是在基類中具有final屬性的那些方法〔也適用于private方法,它們自動具有final屬性〕。這些方法不能被覆蓋,所以不會出現(xiàn)上述潛在的問題。內(nèi)部類內(nèi)部類將一個類聲明置入另一個類聲明中,稱這種類為“內(nèi)部類〞。在內(nèi)部類中可以訪問它的外部類的所有數(shù)據(jù)成員和方法。聲明內(nèi)部類的兩種方法命名的內(nèi)部類:可在類的內(nèi)部屢次使用匿名內(nèi)部類:可在new關鍵字后聲明內(nèi)部類,并立即創(chuàng)立一個對象輸入輸出流概論I/O流的概念Java將信息的輸入與輸出過程抽象為輸入輸出流。輸入是指數(shù)據(jù)流入程序,輸出是指數(shù)據(jù)從程序流出。Java中的輸入輸出操作通常都是通過輸入輸出流實現(xiàn)的。一個流就是一個從源流向目的地的數(shù)據(jù)序列。輸入輸出流可以與各種數(shù)據(jù)源和目標相連。輸入輸出流的分類從流的方向劃分:輸入流或輸出流從流的分工劃分:節(jié)點流或處理流從流的內(nèi)容劃分:面向字符的流或面向字節(jié)的流面向字符的流——Reader和Writer類針對字符數(shù)據(jù)的特點進行過優(yōu)化,提供一些面向字符的有用特性,源或目標通常是文本文件。字節(jié)流——InputStream和OutputStream類是用來處理8位字節(jié)流的抽象基類,程序使用這兩個類的子類來讀寫8位的字節(jié)信息。文件讀寫寫文本文件的例子在C盤根目錄下創(chuàng)立文本文件Hello.txt,并寫入假設干行文本。importjava.io.*;classEx6_2{publicstaticvoidmain(String[]args)throwsIOException{//main方法中聲明拋出IO異常StringfileName="C:\\Hello.txt";FileWriterwriter=newFileWriter(fileName);writer.write("Hello!\n");writer.write("Thisismyfirsttextfile,\n");writer.write("Youcanseehowthisisdone.\n");writer.write("輸入一行中文也可以\n");writer.close();}}讀文本文件的例子從C盤根目錄的文本文件Hello.txt中讀取文本并顯示在屏幕上。importjava.io.*;classEx6_5{publicstaticvoidmain(String[]args){StringfileName="C:/Hello.txt",line;try{BufferedReaderin=newBufferedReader(newFileReader(fileName));line=in.readLine();//讀取一行內(nèi)容while(line!=null){ System.out.println(line); line=in.readLine(); }in.close();}catch(IOExceptioniox){System.out.println("Problemreading"+fileName);}}}寫二進制文件的例子將三個int型整數(shù)255,0,-1寫入數(shù)據(jù)文件data1.dat。importjava.io.*;classEx6_7{publicstaticvoidmain(String[]args){StringfileName="c:/data1.dat";intvalue0=255,value1=0,value2=-1;try{DataOutputStreamout=newDataOutputStream(newFileOutputStream(fileName));out.writeInt(value0);out.writeInt(value1);out.writeInt(value2);out.close();}catch(IOExceptioniox){ System.out.println("Problemwriting"+fileName);}}}讀二進制文件的例子讀取C盤根目錄data1.dat中的三個int型數(shù)字,顯示相加結果。importjava.io.*;classEx6_10{ publicstaticvoidmain(String[]args){ StringfileName="c:\\data1.dat"; intsum=0;try{DataInputStreaminstr=newDataInputStream(newBufferedInputStream(newFileInputStream(fileName)));sum+=instr.readInt();sum+=instr.readInt();sum+=instr.readInt();System.out.println("Thesumis:"+sum);instr.close();} catch(IOExceptioniox){ System.out.println("Problemreading"+fileName);} }}}File類使用舉例在C盤創(chuàng)立文件Hello.txt,如果存在那么刪除舊文件,不存在那么直接創(chuàng)立新文件。importjava.io.*;publicclassEx6_13{ publicstaticvoidmain(String[]args){ Filef=newFile("c:"+File.separator+"Hello.txt"); if(f.exists())f.delete(); else try{ f.createNewFile(); } catch(Exceptione){ System.out.println(e.getMessage()); } }}對象序列化概念對象序列化舉例創(chuàng)立一個書籍對象,并把它輸出到一個文件book.dat中,然后再把該對象讀出,在屏幕上顯示對象信息。importjava.io.*;publicclassEx6_17{ publicstaticvoidmain(Stringargs[])throwsIOException,ClassNotFoundException{ Bookbook=newBook(100032,"JavaProgrammingSkills","WangSir",30); ObjectOutputStreamoos=newObjectOutputStream(newFileOutputStream("c:/book.dat"));oos.writeObject(book); oos.close(); book=null; ObjectInputStreamois=newObjectInputStream( newFileInputStream("c:/book.dat"));book=(Book)ois.readObject(); ois.close(); System.out.println("IDis:"+book.id); System.out.println("nameis:"+); System.out.println("authoris:"+book.author); System.out.println("priceis:"+book.price); }}classBookimplementsSerializable{ intid; Stringname; Stringauthor; floatprice; publicBook(intid,Stringname,Stringauthor,floatprice){ this.id=id; =name; this.author=author; this.price=price; }}運行結果將生成book.dat文件,并在屏幕顯示:IDis:100032nameis:JavaProgrammingSkillsauthoris:WangSirpriceis:30.0FillWriter類和BufferWriter類比擬File類DataOutputStream類的方法對象群體的組織對象數(shù)組對象數(shù)組的初始化對象數(shù)組的初始化分為靜態(tài)初始化和動態(tài)初始化兩種。靜態(tài)初始化:在聲明和定義數(shù)組的同時對數(shù)組元素進行初始化,例如:BankAccount[]accounts={newBankAccount(“Zhang",100.00), newBankAccount(“Li",2380.00),newBankAccount(“Wang",500.00), newBankAccount(“Liu",175.56),newBankAccount(“Ma",924.02)};動態(tài)初始化:使用運算符new,需要經(jīng)過兩步:首先給數(shù)組分配空間typearrayName[]=newtype[arraySize];然后給每一個數(shù)組元素分配空間arrayName[0]=newtype(paramList); … arrayName[arraySize-1]=newtype(paramList);二維數(shù)組集合數(shù)組的優(yōu)缺點數(shù)組是Java提供的隨機訪問對象序列的最有效方法,數(shù)組是一個簡單的線性序列,訪問元素的速度較快,但是其缺點是數(shù)組大小自創(chuàng)立以后就固定了,在數(shù)組對象的整個生存期內(nèi)其大小不可改變。而且,數(shù)組元素只能是同一類型。Java集合框架Java集合框架提供了一些現(xiàn)成的數(shù)據(jù)結構可供使用,程序員可以利用集合框架快速編寫代碼,并獲得優(yōu)良特性。集合框架是為表示和操作集合而規(guī)定的一種統(tǒng)一的標準的體系結構,包括三大塊內(nèi)容,即對外的接口、接口的實現(xiàn)和對集合運算的算法。接口是表示集合的抽象數(shù)據(jù)類型,使集合的操作和表示分開。實現(xiàn)是指實現(xiàn)集合接口的Java類,是可重用的數(shù)據(jù)結構。算法是指執(zhí)行運算的方法。接口Java集合框架接口的根本結構如下列圖:Collection接口中聲明了很多抽象方法,這些方法可分為查詢方法及修改方法。Set接口是一個不含重復元素的集合,是數(shù)學中“集合〞的抽象。實現(xiàn)接口List的類中的元素是有順序的、可以包含重復元素、且每個元素都有一個index值〔從0開始〕標明元素在列表中的位置。Map是一個從關鍵字到值的映射對象,Map中不能有重復的關鍵字,每個關鍵字最多能夠映射到一個值。SortedSet是一種特殊的Set,其中的元素是升序排列的,并且還增加了與次序相關的操作,通常用于存放詞匯表這樣的內(nèi)容。SortedMap是一種特殊的Map,其中的關鍵字是升序排列的,通常用于詞典和目錄等。Collection接口LinkedList、Vector、Stack、ArrayList、HashSet、TreeSet中哪些類中的元素不重復,哪些類中的元素重復?Vector和ArrayList類Vector/ArrayList是實現(xiàn)了Collection接口的具體類,其功能如下:能夠存儲任意對象,但通常情況下,這些不同類型的對象都具有相同的父類或接口不能存儲根本類型〔primitive〕的數(shù)據(jù),除非將這些數(shù)據(jù)包裹在包裹類中其容量能夠根據(jù)空間需要自動擴充增加元素方法的效率較高,除非空間已滿,在這種情況下,在增加之前需要先擴充容量Vector方法是同步的,線程平安ArrayList方法是非同步的,效率較高Enumeration類使用舉例importjava.util.Vector;importjava.util.Enumeration;publicclassEnumerationTester{publicstaticvoidmain(Stringargs[]){Enumerationdays;VectordayNames=newVector();dayNames.add("Sunday");dayNames.add("Monday");dayNames.add("Tuesday");dayNames.add("Wednesday");dayNames.add("Thursday");dayNames.add("Friday");dayNames.add("Saturday");days=dayNames.elements();while(days.hasMoreElements())System.out.println(days.nextElement());}}Iterator類使用舉例importjava.util.Vector;importjava.util.Iterator;publicclassIteratorTester{publicstaticvoidmain(Stringargs[]){String[]num={"one","two","three","four","five","six","seven","eight","nine","ten"};VectoraVector=newVector(java.util.Arrays.asList(num));System.out.println("BeforeVector:"+aVector);Iteratornums=aVector.iterator();while(nums.hasNext()){StringaString=(String)nums.next();System.out.println(aString);if(aString.length()>4)nums.remove();}System.out.println("AfterVector:"+aVector);}}哈希表哈希表〔HashTable、HashMap〕也稱為散列表,是用來存儲群體對象的集合類結構。哈希表中,對象的存儲位置和對象的關鍵屬性k之間有一個特定的對應關系f,我們稱之為哈希(Hash)函數(shù)。它使每個對象與一個唯一的存儲位置相對應。因而在查找時,只要根據(jù)待查對象的關鍵屬性k,計算f(k)的值即可知其存儲位置與哈希表相關的一些主要概念容量〔capacity〕——哈希表的容量不是固定的,隨對象的參加,其容量可以自動擴充關鍵字/鍵〔key〕——每個存儲的對象都需要有一個關鍵字key,key可以是對象本身,也可以是對象的一局部〔如對象的某一個屬性〕哈希碼〔hashcode〕——要將對象存儲到HashTable,就需要將其關鍵字key映射到一個整型數(shù)據(jù),稱為key的哈希碼〔hashcode〕哈希函數(shù)〔hashfunction〕——返回對象的哈希碼項〔item〕——哈希表中的每一項都有兩個域:關鍵字域key及值域value〔即存儲的對象〕。key及value都可以是任意的Object類型的對象,但不能為空(null),HashTable中的所有關鍵字都是唯一的裝填因子〔loadfactor〕——(表中填入的項數(shù))/(表的容量)HashTable應用舉例有一個音像店出租電影片業(yè)務,需要編寫一個應用程序進行管理,在進行出租時能夠很快找到顧客需要的電影片。〔代碼略〕聲明一個矩陣類Matrix,其成員變量是一個二維數(shù)組,數(shù)組元素類型為int,設計下面的方法,并聲明測試類對這些方法進行測試。構造方法。Matrix() //構造一個10×10個

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論