版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
接口是特殊的抽象類,它側(cè)重于描述概念的所具備的功能和具體屬性(成員變量為常量),但不實現(xiàn)。接口的使用分為3個步驟:定義接口實現(xiàn)接口使用接口14.6接口定義接口的基本格式為:[public]interface
interfacename{
常量聲明;
抽象方法聲明;}接口的訪問屬性或者為”public”或者”缺省”;定義接口的關鍵字是interface而不是class;常量必須為publicstaticfinal,在接口中可以省略;成員方法必須是抽象方法,在接口中也可以省略publicabstract。接口具有繼承性,可通過extends關鍵字聲明父接口,但不能被實例化。24.6接口的定義3接口舉例2:
Comparable接口publicinterfaceComparable
{//比較兩個對象大小
intcompareTo(ObjectotherObject); }compareTo的含義:將調(diào)用這個方法的對象與參數(shù)帶入的對象otherObject進行比較,如果前者小,返回-1;如果相等返回0;否則,返回1。4實現(xiàn)接口是指,構(gòu)造一個類,并在該類中覆蓋接口中的所有方法,。4.6.2接口的實現(xiàn)Comparable接口的實現(xiàn)5以職工類(Employee)實現(xiàn)Comparable接口為例EmployeeprivateStringname;privatedoublesalary;privateStringdepartment;//成員變量的更改器//成員變量的獲取器publicStringtoString()publicintcompareTo(ObjectotherObject)Employee實現(xiàn)Comparable接口publicclassEmployeeimplements
Comparable{ privateStringname; //姓名
privatedoublesalary; //工資
privateStringdepartment; //部門
……
//構(gòu)造方法
…… //其他成員方法
publicintcompareTo(ObjectotherObject)
{……}}6compareTo方法的實現(xiàn)publicintcompareTo(ObjectotherObject)
{ //定義3個可能的返回值的所滿足的條件
Employeeother=(Employee)otherObject;if(salary<other.salary)return-1;//比較工資多少
if(salary==other.salary)return0;elsereturn1;}}78Comparable接口的使用Employeee1=newEmployee("Wang",4000.0,"Software");Employeee2=newEmployee("Sun",3000.0,"Math");switch(pareTo(e2)){case-1:System.out.println("<");break;case0:System.out.println("==");break;case1:System.out.println(">");break;}運行的結(jié)果是?練習下面的程序輸出的結(jié)果是()interfaceB{intk=10;}publicclassAimplementsB{
publicstaticvoidmain(Stringargs[]){
inti;
Ac1=newA();
i=c1.k;
System.out.println("i="+i);}}A)i=0
B)i=10C)程序有編譯錯誤D)i=true補充:
接口的繼承關系
1.接口的單繼承2.接口的多重繼承1.接口的單繼承。interfaceA{voidF1();}interfaceBextendsA{voidF2();}說明:接口B將繼承接口A中的所有變量和方法,這種接口之間的繼承稱為單繼承。接口之間的繼承與類的繼承一樣使用關鍵字extends。2.接口的多重繼承在Java語言中,不支持類的多重繼承。但是支持接口的多重繼承,其語法格式如下:
interface接口名extends接口名1,接口名2,…抽象類與接口的比較13抽象類接口共同點二者都可具有抽象方法,都不能實例化,但都可以有自己的聲明,并能引用子類或?qū)崿F(xiàn)類對象。不同點屬性變量可以有變量不能有,只能是靜態(tài)常量。成員方法可以有具體方法(而且具體方法可以調(diào)用抽象方法)。如果有方法,則全部是抽象方法。實現(xiàn)策略必須有子類繼承必須有實現(xiàn)類實現(xiàn)擴展性弱強課堂練習1.關于接口的聲明和實現(xiàn),以下描述正確的是
。A.接口聲明的方法只有聲明沒有實現(xiàn)
B.接口聲明中的變量都必須寫明final和staticC.如果一個接口由多個類來實現(xiàn),則這些類在實現(xiàn)該接口中的方法時采用統(tǒng)一的代碼D.如果一個類實現(xiàn)接口,則必須實現(xiàn)該接口中的所有方法,但方法未必申明為public14課堂練習2.下列有關抽象類與接口的敘述中正確的是哪一個
。A.抽象類中不可以有非抽象方法,接口中也必須有抽象方法B.抽象類中可以有非抽象方法,接口中也可以有非抽象方法C.接口中的方法必須是抽象方法D.抽象類中的變量定義時必須初始化,而接口中不是15課堂練習3.下面程序運行的結(jié)果是
。interfaceInterfaceA{ Strings="good"; voidf(); }classClassAimplementsInterfaceA{ publicvoidf(){ System.out.print(s); }}
classClassB{ voidg(InterfaceAa){ a.f(); } }publicclassE{ publicstaticvoidmain(String[]args){ ClassBb=newClassB(); b.g(newClassA()); }}A.good B.編譯正確,但無運行結(jié)果C.編譯錯誤:b.g(newClassA()) D.以上都不對1617接口是一種特殊形式的抽象類,它主要用來組織公用的常量,并統(tǒng)一操作行為的格式,通常它被應用在三個主要方面:用接口包裝常量??梢詫⒏魇礁鳂拥某A糠旁诮涌谥?,讓每個使用這些常量的類對象實現(xiàn)這個接口,從而達到享有這些常量的目的為操作同類事物提供統(tǒng)一接口。接口是為了解決Java語言中不支持類的多重繼承的問題。接口的主要應用184.7包包是類和接口的集合。從資源管理的角度,可以將“包”理解為文件夾(目錄)。將所有的類和接口按功能分別放置在不同的包中主要有兩點好處:一是便于將若干個已存在的類或接口整體地添加到程序代碼中;二是避免出現(xiàn)類名沖突的現(xiàn)象。19創(chuàng)建一個包就是用包的名稱在文件系統(tǒng)下創(chuàng)建一個目錄。在創(chuàng)建的目錄下,既可以存放類文件或接口文件,也可以包含子目錄,這些子目錄是該包中的子包。創(chuàng)建一個包且將類文件放入其中的語法格式為:
packagepackageName;//
packageName是包名在NetBeans中,如果將類文件放入默認包,則沒有包語句;如果將類文件放入指定的包中,類文件中會自動生成包語句。4.7.1創(chuàng)建包20對于在包中具有public訪問屬性的類或接口,可以通過導入語句(import)將其添加到程序代碼中。導入語句的基本格式為import后跟包名序列及類名。
importuserPackage.*;userPackage是包名,.*代表將包中的所有類和接口都加載進來。
importuserPackage1.userPackage2.userPackage3.*;這條語句表示將userPackage1包中的子包userPackage2的子包userPackage3中的所有類和接口加載進來。4.7.2加載包引用不同包中的類21課堂測試編寫一個學生類,其中包含:姓名、年齡和學位,構(gòu)造方法及其輸出學生信息抽象的方法;編寫一個本科生類,在學生類的基礎上增加“專業(yè)”,另編寫構(gòu)造方法、輸出本科生信息的方法;編寫一個研究生類,在學生類的基礎上增加“研究方向”,另編寫構(gòu)造方法、輸出研究生信息的方法。編寫測試類,分別創(chuàng)建一個本科生和研究生對象,然后調(diào)用相關方法輸出所有信息。224.8應用舉例設計二人游戲二人游戲:由兩名選手參與的游戲。比如:象棋、跳棋和五子棋等分析:兩人游戲中有哪些共同的數(shù)據(jù)和操作。數(shù)據(jù):應包含標識兩名選手的常量;記錄下一步應該是哪位選手操作的成員變量。23游戲中的操作1.指定從哪位選手開始2.返回當前操作的選手3.改變當前操作的選手4.返回游戲規(guī)則;5.判斷游戲是否結(jié)束;6.返回獲勝選手;7.返回游戲的提示信息8.返回游戲當前狀態(tài);9.游戲操作;10.接受用戶輸入;11.報告游戲當前狀態(tài);12.游戲信息提示;24TwoPlayerGame(抽象類)25publicstaticfinalintPLAYER_ONE=1;publicstaticfinalintPLAYER_TWO=2;protectedbooleanonePlaysNext=true;publicvoidsetPlayer(intstarter)//指定從哪位選手開始publicintgetPlayer()//返回當前操作的選手publicvoidchangePlayer()//改變當前操作的選手publicabstractStringgetRules();//返回游戲規(guī)則publicabstractbooleangameOver();//返回游戲是否結(jié)束publicabstractStringgetWinner();
//返回獲勝者
TwoPlayerGamesetPlayerpublicvoidsetPlayer(intstarter)//指定從哪位選手開始
{if(starter==PLAYER_TWO){onePlaysNext=false;}else{onePlaysNext=true;}}26getPlayerpublicintgetPlayer()//返回當前操作的選手
{if(onePlaysNext==true){returnPLAYER_ONE;}else{returnPLAYER_TWO;}}27changePlayer()publicvoidchangePlayer()//改變當前操作的選手
{onePlaysNext=!onePlaysNext;}28Game接口publicinterfaceGame{publicStringgetGamePrompt(); //返回游戲提示
publicStringreportGameState(); //返回游戲當前狀態(tài)}29UIPlay接口publicinterfaceUIPlayextendsGame{voidplay(UserInterfaceui);
//控制游戲循環(huán)過程}30UserInterface接口publicinterfaceUserInterface{StringgetUserInput(); //接收用戶輸入
voidreport(Strings);//報告游戲當前狀態(tài)
voidprompt(Strings); //游戲信息提示}31為什么要設置接口?Game接口返回游戲提示返回游戲當前狀態(tài)UIPlay接口控制游戲循環(huán)過程UserInterface接口接收用戶輸入報告游戲當前狀態(tài)游戲信息提示32接口中的抽象方法的實現(xiàn)都與用戶界面相關(用戶的不同輸入將導致不同的操作結(jié)果)為了將核心操作與用戶界面的實現(xiàn)分開,設置這些接口。一個具體的二人游戲:拿小棍游戲規(guī)則:游戲中有MAX_STICKS根小棍排成一排。游戲中的兩名選手輪流拿棍,每人一次最多拿MAX_PICKUP根。拿走最后一根者為輸。33OneRowNim類publicclassOneRowNimextendsTwoPlayerGameimplementsUIPlay{publicstaticfinalintMAX_PICKUP=3;//最多拿小棍的根數(shù)
publicstaticfinalintMAX_STICKS=21;//小棍數(shù)
privateintnSticks=MAX_STICKS;//當前剩余的棍數(shù)
……34ConsoleInterface類publicclassConsoleInterfaceimplementsUserInterface{publicStringgetUserInput(){…….}publicvoidreport(Strings){……}publicvoidprompt(Strings){……}publicstaticvoidmain(String[]args){ConsoleInterfaceUser=newConsoleInterface();OneRowNimgame=newOneRowNim(21);game.play(User);}}35類、接口之間的關系36TwoPlayerGame<Interface>Game<Interface>UIPlayOneRowNim<Interface>UserInterfaceConsoleInterface37第5章異常處理38異常:程序運行中出現(xiàn)的不正常的現(xiàn)象,使得程序無法繼續(xù)執(zhí)行,如果不加以處理可能會造成不必要的損失。影響程序正常運行的主要原因來自三個方面:(1)用戶輸入錯誤。例如:輸入數(shù)據(jù)類型錯誤。(2)運行程序的系統(tǒng)出現(xiàn)了異常。例如,發(fā)出打印命令,但打印機處于關閉狀態(tài);磁盤已滿等;(3)程序本身存在的問題。例如,整數(shù)被0整除;數(shù)組下標越界等。5.1.1異常的概念5.2異常處理機制Java語言將處理異常的代碼從程序中抽取出來,封裝成類,完成以下任務:保存當前已完成的結(jié)果。允許用戶安全地退出應用程序。通知用戶異常出現(xiàn)的原因,指出發(fā)生哪類異常。追蹤異常出現(xiàn)的位置。3940在Java語言中,對各種可能出現(xiàn)的異常進行了標準化,將它們封裝成了類,我們將統(tǒng)稱為異常類。一旦在程序運行過程中發(fā)生異常,Java虛擬機就會自動地創(chuàng)建一個相應的異常類對象,并將該對象作為參數(shù)拋給處理異常的方法。在這些異常類中,主要包含了有關異常的屬性信息,跟蹤信息等。5.1.2Java語言中的異常類41Java異常類結(jié)構(gòu)Throwable類是所有異常類的父類。Error類用來描述Java運行系統(tǒng)的內(nèi)部錯誤和資源耗盡等致命性錯誤。程序代碼錯誤導致的異常。有關輸入輸出的異常。42java.lang的RuntimeException類的異常子類(P159)類名描述ArithmeticExecption如果進行非法的算術(shù)運算就會產(chǎn)生這類異常。IndexutOfBoundsException在訪問String或Vector對象的內(nèi)容時,如果出現(xiàn)了下標越界將會產(chǎn)生這類異常。NegativeArraySizeException如果在創(chuàng)建數(shù)組時,將數(shù)組的維數(shù)指定為負值就會產(chǎn)生這類異常。NullPointerException試圖訪問null對象或成員方法時將產(chǎn)生這類異常。ArrayStroeException如果試圖在數(shù)組中存入一個數(shù)組元素類型不允許的對象就會產(chǎn)生這類異常。435.2異常處理機制Java程序中,處理異常要經(jīng)歷三個主要階段:拋出異常;捕獲異常;處理異常。44所謂拋出異常是指在程序的運行過程中,一旦發(fā)生了異常,就立即創(chuàng)建一個與該異常相對應的異常類對象,將其作為參數(shù)拋給處理該異常的代碼塊。拋出異常分為兩種:隱式聲明拋出(異常)顯式聲明拋出(異常)5.2.1拋出異常參考:袁紹欣等編著的《Java面向?qū)ο蟪绦蛟O計(第2版)》隱式聲明拋出異常沒有進行任何聲明和處理,而直接交給Java虛擬機去處理的異常。45顯式聲明拋出異常舉例46顯式聲明拋出異常說明throw關鍵字用來告知編譯器此處要發(fā)生一個異常(拋出一個異常對象)。格式:thrownewExceptionClassName(parameterList)
thrownewException("第"+i+"個元素不存在");throws關鍵字用來聲明一個方法中可能拋出的異常,但不處理。格式:throwsExceptionClassName在成員方法參數(shù)后。
voidf(inti)throwsException說明:1.throws可以拋出多個異常,兩個間用逗號隔開;2.throws所聲明的異常類型應與成員方法中拋出的類型一致。47Throws練習4849在Java程序中,捕獲異常用try-catch-finally語句實現(xiàn),該語句可以被用來捕獲一個或多個異常,基本語法格式為:try{Javastatements}catch
(ExceptionType1ExceptionObject){
handlerforthisexceptiontype}catch(ExceptionType2ExceptionObject){
handlerforthisexceptiontype}.......5.2.2捕獲并處理異常try-catch-finally語句說明try{}中Javastatements是可能產(chǎn)生異常的程序代碼(被監(jiān)視的代碼段)。catch()中ExceptionObject是可能拋出的異常對象,而后面{}中是對異常進行的處理代碼。50try{}中被監(jiān)視的代碼的操作,在花括號以外無法檢測。捕獲并處理異常練習publicclassTestTryCatch{//測試異常捕獲類publicstaticvoidmain(String[]args){inti=1;intj=0;
try
{//捕獲異常語句System.out.println("Tryblockentered"+"i="+i+"j="+j);System.out.println(i/j);//產(chǎn)生ArithmeticException異常
System.out.println("Endingtryblock");}catch(ArithmeticExceptione){System.out.println("Arithmeticexceptioncaught");}System.out.println("Aftertryblock");}}51
try{Javastatements}catch(ExceptionType1ExceptionObject){handlerforthisexceptiontype}catch(ExceptionType2ExceptionObject){handlerforthisexceptiontype}.......finally{handlerforfinally}52為了更好地控制程序的執(zhí)行過程,使程序能夠在任何情況下都具有統(tǒng)一的結(jié)束方式,可以在try語句塊的最后一個catch子句之后增加一個finally子句。5.2.2捕獲異常53try{System.out.println("\nFirsttryblockindivide()entered"); array[index+2]=array[index]/array[index+1]; System.out.println("Codeatendoffirsttryblockindivide()");}catch(ArithmeticExceptione){ System.out.println("Arithmeticexceptioncaughtindivide()");}catch(ArrayIndexOutOfBoundsExceptione){ System.out.println("Index-out-of-boundsexceptioncaught“}finally{ System.out.println("finallyblockindivide()");}如果在一個try語句塊中有可能發(fā)生多種不同類型的異常,就需要在try之后放置多個catch子句。54在Java語言中,處理異常主要有兩種方式:在產(chǎn)生異常的方法中處理異常
try-catch-finally語句將異常拋給調(diào)用該方法的代碼段,
Throws語句但如果由程序處理,最終都是由try-catch-finally語句實現(xiàn),否則交由系統(tǒng)處理5.2.3處理異常處理異常練習publicclassThrowsException{
publicstaticvoidmain(String[]args){try{Method(0);Method(1); }catch(NumberFormatExceptione){System.out.println("\t捕獲異常:"+e);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("\t捕獲異常:"+e);}
finally{System.out.println(“在任何狀態(tài)下,finally語句塊都將被執(zhí)行?!?;}}5556staticvoidMethod(inti)
throwsArithmeticException,NumberFormatException{ System.out.println("調(diào)用方法Method("+i+")"); if(i==0){ thrownewArithmeticException("i=0");}elseif(i==1){thrownewNumberFormatException("i=1");}}57為了更加方便應用程序捕獲和處理異常,Java語言將很多異常進行了標準化,并組成了類層次結(jié)構(gòu)。不僅如此,它還為用戶提供了自定義異常類的能力,使得用戶可以根據(jù)自己的需求,定義符合自己需求的異常類。5.2.4用戶自定義異常類58Java語言要求,任何異常類都必須是Throwable類的子類,Throwable是所有異常類的公共父類。Throwable類中主要包含了由構(gòu)造方法初始化的異常描述性信息和創(chuàng)建異常對象時堆棧的記錄情況,它記載了調(diào)用每個成員方法的全部過程。如果希望訪問這些內(nèi)容,可以通過Throwable類中的public成員方法實現(xiàn)。Throwable類59Throwable類的public成員方法成員方法描述getMessage()返回當前異常的描述性信息,其中主要包括異常類的名稱及有關異常的簡短描述。printStackTrace()將堆棧的跟蹤信息輸出到標準的輸出流中。在控制臺方式下,標準輸出流指屏幕。printStackTrack(PrintStreams)將堆棧的跟蹤信息通過參數(shù)s返回。fillInstackTrack()填寫跟蹤信息。60除了異常類必須是Throwable類的子類之外,建議最好將定義的異常類作為Exception的子類,這樣Java編譯器才能跟蹤程序中拋出的異常位置。定義異常類的基本格式:classTestExceptionextendsException{TestException(){super();}TestException(Strings){super
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 產(chǎn)權(quán)車位轉(zhuǎn)讓合同范本
- 乒乓球館租賃合同范本
- 倉儲合同范本
- 產(chǎn)業(yè)園區(qū)物業(yè)管理服務大綱
- 倉儲中心配電房施工合同
- 互聯(lián)網(wǎng)眾籌合作協(xié)議
- 個人雇傭合同范本
- 代工合同協(xié)議
- 《科技園區(qū)物業(yè)風險管理手冊》
- 三方智能交通系統(tǒng)合作協(xié)議
- 可靠性的基本概念演示
- htr-pm通風空調(diào)系統(tǒng)核電站hvac簡介
- 工業(yè)園區(qū)企業(yè)環(huán)境風險和安全隱患排查情況表優(yōu)質(zhì)資料
- 工程建設標準強制性條文電力工程部分
- 從局部到整體:5G系統(tǒng)觀-概要版-vivo通信研究院
- GB/T 22844-2009配套床上用品
- GB/T 14683-2017硅酮和改性硅酮建筑密封膠
- 無人機校企合作協(xié)議
- 《百團大戰(zhàn)》歷史課件
- 八年級上冊道德及法治非選擇題專項訓練
- 2023年徐州市國盛控股集團有限公司招聘筆試題庫及答案解析
評論
0/150
提交評論