




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
接口是特殊的抽象類,它側重于描述概念的所具備的功能和具體屬性(成員變量為常量),但不實現。接口的使用分為3個步驟:定義接口實現接口使用接口14.6接口定義接口的基本格式為:[public]interface
interfacename{
常量聲明;
抽象方法聲明;}接口的訪問屬性或者為”public”或者”缺省”;定義接口的關鍵字是interface而不是class;常量必須為publicstaticfinal,在接口中可以省略;成員方法必須是抽象方法,在接口中也可以省略publicabstract。接口具有繼承性,可通過extends關鍵字聲明父接口,但不能被實例化。24.6接口的定義3接口舉例2:
Comparable接口publicinterfaceComparable
{//比較兩個對象大小
intcompareTo(ObjectotherObject); }compareTo的含義:將調用這個方法的對象與參數帶入的對象otherObject進行比較,如果前者小,返回-1;如果相等返回0;否則,返回1。4實現接口是指,構造一個類,并在該類中覆蓋接口中的所有方法,。4.6.2接口的實現Comparable接口的實現5以職工類(Employee)實現Comparable接口為例EmployeeprivateStringname;privatedoublesalary;privateStringdepartment;//成員變量的更改器//成員變量的獲取器publicStringtoString()publicintcompareTo(ObjectotherObject)Employee實現Comparable接口publicclassEmployeeimplements
Comparable{ privateStringname; //姓名
privatedoublesalary; //工資
privateStringdepartment; //部門
……
//構造方法
…… //其他成員方法
publicintcompareTo(ObjectotherObject)
{……}}6compareTo方法的實現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;}運行的結果是?練習下面的程序輸出的結果是()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抽象類接口共同點二者都可具有抽象方法,都不能實例化,但都可以有自己的聲明,并能引用子類或實現類對象。不同點屬性變量可以有變量不能有,只能是靜態常量。成員方法可以有具體方法(而且具體方法可以調用抽象方法)。如果有方法,則全部是抽象方法。實現策略必須有子類繼承必須有實現類實現擴展性弱強課堂練習1.關于接口的聲明和實現,以下描述正確的是
。A.接口聲明的方法只有聲明沒有實現
B.接口聲明中的變量都必須寫明final和staticC.如果一個接口由多個類來實現,則這些類在實現該接口中的方法時采用統一的代碼D.如果一個類實現接口,則必須實現該接口中的所有方法,但方法未必申明為public14課堂練習2.下列有關抽象類與接口的敘述中正確的是哪一個
。A.抽象類中不可以有非抽象方法,接口中也必須有抽象方法B.抽象類中可以有非抽象方法,接口中也可以有非抽象方法C.接口中的方法必須是抽象方法D.抽象類中的變量定義時必須初始化,而接口中不是15課堂練習3.下面程序運行的結果是
。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.編譯正確,但無運行結果C.編譯錯誤:b.g(newClassA()) D.以上都不對1617接口是一種特殊形式的抽象類,它主要用來組織公用的常量,并統一操作行為的格式,通常它被應用在三個主要方面:用接口包裝常量。可以將各式各樣的常量放在接口中,讓每個使用這些常量的類對象實現這個接口,從而達到享有這些常量的目的為操作同類事物提供統一接口。接口是為了解決Java語言中不支持類的多重繼承的問題。接口的主要應用184.7包包是類和接口的集合。從資源管理的角度,可以將“包”理解為文件夾(目錄)。將所有的類和接口按功能分別放置在不同的包中主要有兩點好處:一是便于將若干個已存在的類或接口整體地添加到程序代碼中;二是避免出現類名沖突的現象。19創建一個包就是用包的名稱在文件系統下創建一個目錄。在創建的目錄下,既可以存放類文件或接口文件,也可以包含子目錄,這些子目錄是該包中的子包。創建一個包且將類文件放入其中的語法格式為:
packagepackageName;//
packageName是包名在NetBeans中,如果將類文件放入默認包,則沒有包語句;如果將類文件放入指定的包中,類文件中會自動生成包語句。4.7.1創建包20對于在包中具有public訪問屬性的類或接口,可以通過導入語句(import)將其添加到程序代碼中。導入語句的基本格式為import后跟包名序列及類名。
importuserPackage.*;userPackage是包名,.*代表將包中的所有類和接口都加載進來。
importuserPackage1.userPackage2.userPackage3.*;這條語句表示將userPackage1包中的子包userPackage2的子包userPackage3中的所有類和接口加載進來。4.7.2加載包引用不同包中的類21課堂測試編寫一個學生類,其中包含:姓名、年齡和學位,構造方法及其輸出學生信息抽象的方法;編寫一個本科生類,在學生類的基礎上增加“專業”,另編寫構造方法、輸出本科生信息的方法;編寫一個研究生類,在學生類的基礎上增加“研究方向”,另編寫構造方法、輸出研究生信息的方法。編寫測試類,分別創建一個本科生和研究生對象,然后調用相關方法輸出所有信息。224.8應用舉例設計二人游戲二人游戲:由兩名選手參與的游戲。比如:象棋、跳棋和五子棋等分析:兩人游戲中有哪些共同的數據和操作。數據:應包含標識兩名選手的常量;記錄下一步應該是哪位選手操作的成員變量。23游戲中的操作1.指定從哪位選手開始2.返回當前操作的選手3.改變當前操作的選手4.返回游戲規則;5.判斷游戲是否結束;6.返回獲勝選手;7.返回游戲的提示信息8.返回游戲當前狀態;9.游戲操作;10.接受用戶輸入;11.報告游戲當前狀態;12.游戲信息提示;24TwoPlayerGame(抽象類)25publicstaticfinalintPLAYER_ONE=1;publicstaticfinalintPLAYER_TWO=2;protectedbooleanonePlaysNext=true;publicvoidsetPlayer(intstarter)//指定從哪位選手開始publicintgetPlayer()//返回當前操作的選手publicvoidchangePlayer()//改變當前操作的選手publicabstractStringgetRules();//返回游戲規則publicabstractbooleangameOver();//返回游戲是否結束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(); //返回游戲當前狀態}29UIPlay接口publicinterfaceUIPlayextendsGame{voidplay(UserInterfaceui);
//控制游戲循環過程}30UserInterface接口publicinterfaceUserInterface{StringgetUserInput(); //接收用戶輸入
voidreport(Strings);//報告游戲當前狀態
voidprompt(Strings); //游戲信息提示}31為什么要設置接口?Game接口返回游戲提示返回游戲當前狀態UIPlay接口控制游戲循環過程UserInterface接口接收用戶輸入報告游戲當前狀態游戲信息提示32接口中的抽象方法的實現都與用戶界面相關(用戶的不同輸入將導致不同的操作結果)為了將核心操作與用戶界面的實現分開,設置這些接口。一個具體的二人游戲:拿小棍游戲規則:游戲中有MAX_STICKS根小棍排成一排。游戲中的兩名選手輪流拿棍,每人一次最多拿MAX_PICKUP根。拿走最后一根者為輸。33OneRowNim類publicclassOneRowNimextendsTwoPlayerGameimplementsUIPlay{publicstaticfinalintMAX_PICKUP=3;//最多拿小棍的根數
publicstaticfinalintMAX_STICKS=21;//小棍數
privateintnSticks=MAX_STICKS;//當前剩余的棍數
……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異常:程序運行中出現的不正常的現象,使得程序無法繼續執行,如果不加以處理可能會造成不必要的損失。影響程序正常運行的主要原因來自三個方面:(1)用戶輸入錯誤。例如:輸入數據類型錯誤。(2)運行程序的系統出現了異常。例如,發出打印命令,但打印機處于關閉狀態;磁盤已滿等;(3)程序本身存在的問題。例如,整數被0整除;數組下標越界等。5.1.1異常的概念5.2異常處理機制Java語言將處理異常的代碼從程序中抽取出來,封裝成類,完成以下任務:保存當前已完成的結果。允許用戶安全地退出應用程序。通知用戶異常出現的原因,指出發生哪類異常。追蹤異常出現的位置。3940在Java語言中,對各種可能出現的異常進行了標準化,將它們封裝成了類,我們將統稱為異常類。一旦在程序運行過程中發生異常,Java虛擬機就會自動地創建一個相應的異常類對象,并將該對象作為參數拋給處理異常的方法。在這些異常類中,主要包含了有關異常的屬性信息,跟蹤信息等。5.1.2Java語言中的異常類41Java異常類結構Throwable類是所有異常類的父類。Error類用來描述Java運行系統的內部錯誤和資源耗盡等致命性錯誤。程序代碼錯誤導致的異常。有關輸入輸出的異常。42java.lang的RuntimeException類的異常子類(P159)類名描述ArithmeticExecption如果進行非法的算術運算就會產生這類異常。IndexutOfBoundsException在訪問String或Vector對象的內容時,如果出現了下標越界將會產生這類異常。NegativeArraySizeException如果在創建數組時,將數組的維數指定為負值就會產生這類異常。NullPointerException試圖訪問null對象或成員方法時將產生這類異常。ArrayStroeException如果試圖在數組中存入一個數組元素類型不允許的對象就會產生這類異常。435.2異常處理機制Java程序中,處理異常要經歷三個主要階段:拋出異常;捕獲異常;處理異常。44所謂拋出異常是指在程序的運行過程中,一旦發生了異常,就立即創建一個與該異常相對應的異常類對象,將其作為參數拋給處理該異常的代碼塊。拋出異常分為兩種:隱式聲明拋出(異常)顯式聲明拋出(異常)5.2.1拋出異常參考:袁紹欣等編著的《Java面向對象程序設計(第2版)》隱式聲明拋出異常沒有進行任何聲明和處理,而直接交給Java虛擬機去處理的異常。45顯式聲明拋出異常舉例46顯式聲明拋出異常說明throw關鍵字用來告知編譯器此處要發生一個異常(拋出一個異常對象)。格式:thrownewExceptionClassName(parameterList)
thrownewException("第"+i+"個元素不存在");throws關鍵字用來聲明一個方法中可能拋出的異常,但不處理。格式:throwsExceptionClassName在成員方法參數后。
voidf(inti)throwsException說明:1.throws可以拋出多個異常,兩個間用逗號隔開;2.throws所聲明的異常類型應與成員方法中拋出的類型一致。47Throws練習4849在Java程序中,捕獲異常用try-catch-finally語句實現,該語句可以被用來捕獲一個或多個異常,基本語法格式為:try{Javastatements}catch
(ExceptionType1ExceptionObject){
handlerforthisexceptiontype}catch(ExceptionType2ExceptionObject){
handlerforthisexceptiontype}.......5.2.2捕獲并處理異常try-catch-finally語句說明try{}中Javastatements是可能產生異常的程序代碼(被監視的代碼段)。catch()中ExceptionObject是可能拋出的異常對象,而后面{}中是對異常進行的處理代碼。50try{}中被監視的代碼的操作,在花括號以外無法檢測。捕獲并處理異常練習publicclassTestTryCatch{//測試異常捕獲類publicstaticvoidmain(String[]args){inti=1;intj=0;
try
{//捕獲異常語句System.out.println("Tryblockentered"+"i="+i+"j="+j);System.out.println(i/j);//產生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為了更好地控制程序的執行過程,使程序能夠在任何情況下都具有統一的結束方式,可以在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語句塊中有可能發生多種不同類型的異常,就需要在try之后放置多個catch子句。54在Java語言中,處理異常主要有兩種方式:在產生異常的方法中處理異常
try-catch-finally語句將異常拋給調用該方法的代碼段,
Throws語句但如果由程序處理,最終都是由try-catch-finally語句實現,否則交由系統處理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(“在任何狀態下,finally語句塊都將被執行。”);}}5556staticvoidMethod(inti)
throwsArithmeticException,NumberFormatException{ System.out.println("調用方法Method("+i+")"); if(i==0){ thrownewArithmeticException("i=0");}elseif(i==1){thrownewNumberFormatException("i=1");}}57為了更加方便應用程序捕獲和處理異常,Java語言將很多異常進行了標準化,并組成了類層次結構。不僅如此,它還為用戶提供了自定義異常類的能力,使得用戶可以根據自己的需求,定義符合自己需求的異常類。5.2.4用戶自定義異常類58Java語言要求,任何異常類都必須是Throwable類的子類,Throwable是所有異常類的公共父類。Throwable類中主要包含了由構造方法初始化的異常描述性信息和創建異常對象時堆棧的記錄情況,它記載了調用每個成員方法的全部過程。如果希望訪問這些內容,可以通過Throwable類中的public成員方法實現。Throwable類59Throwable類的public成員方法成員方法描述getMessage()返回當前異常的描述性信息,其中主要包括異常類的名稱及有關異常的簡短描述。printStackTrace()將堆棧的跟蹤信息輸出到標準的輸出流中。在控制臺方式下,標準輸出流指屏幕。printStackTrack(PrintStreams)將堆棧的跟蹤信息通過參數s返回。fillInstackTrack()填寫跟蹤信息。60除了異常類必須是Throwable類的子類之外,建議最好將定義的異常類作為Exception的子類,這樣Java編譯器才能跟蹤程序中拋出的異常位置。定義異常類的基本格式:classTestExceptionextendsException{TestException(){super();}TestException(Strings){super
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護理個案:上消化道出血
- 護理禮儀與護士服飾
- 養發行業的優勢與前景
- 焦作大學《數學教學技能綜合訓練》2023-2024學年第一學期期末試卷
- 企業競爭策略研究報告
- 信陽農林學院《標志設計》2023-2024學年第二學期期末試卷
- 漯河食品職業學院《統計學原理與實務》2023-2024學年第二學期期末試卷
- 大連民族大學《OS開發技術》2023-2024學年第二學期期末試卷
- 天津中德應用技術大學《節能技術》2023-2024學年第二學期期末試卷
- 蘭州職業技術學院《中醫文獻學》2023-2024學年第一學期期末試卷
- 青少年稅法知識競賽參考題庫(含解析)
- 《石壕吏》課件(共17張PPT)
- 機場現場運行指揮員(教材章節)
- 頸椎功能障礙指數,Neck Disabilitv Index,NDI
- 關注素養 知行合一 優化學校課程建設-“快樂五會”之“學會環保”校本課程開發與實施的研究
- 工程利益相關方的博弈 工程倫理學課件
- 如何落實“三管三必須”完整ppt
- 工程結算表單模板
- DB65∕T 4492-2022 和田玉(白玉)分級
- 超星爾雅學習通《大學生職業發展與就業指導(仁能達教育科技公司)》2020章節測試含答案(下)
- 2019外研社高中英語必修二課文翻譯
評論
0/150
提交評論