Java學習-第3章-類的方法-異常_第1頁
Java學習-第3章-類的方法-異常_第2頁
Java學習-第3章-類的方法-異常_第3頁
Java學習-第3章-類的方法-異常_第4頁
Java學習-第3章-類的方法-異常_第5頁
已閱讀5頁,還剩79頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章類的方法鄭莉JAVA語言程序設計1精選2021版課件目錄3.1方法的控制流程3.2異常處理簡介3.3方法的重載(overloading)3.4本章小結(jié)2精選2021版課件3.1方法的控制流程方法的控制流程Java程序通過控制語句來控制方法的執(zhí)行流程Java中的流程控制結(jié)構(gòu)主要有三種順序結(jié)構(gòu)選擇結(jié)構(gòu)if語句(二路選擇結(jié)構(gòu))switch語句(多路選擇結(jié)構(gòu))循環(huán)結(jié)構(gòu)for語句while語句do-while語句3精選2021版課件3.1.1if選擇結(jié)構(gòu)語法形式只有if分支,沒有else分支if(boolean-expression){//statement1;}if-else語句if(boolean-expression){//statement1;}else{//statement2;}方法的控制流程4精選2021版課件3.1.1if選擇結(jié)構(gòu)(續(xù))if-else語句的特殊形式if(booleanexpression){//statement1;}elseif(booleanexpression){//statement2;}elseif(booleanexpression){//statement;}…else{//statement;}方法的控制流程5精選2021版課件ex3_1輸入一個年份,判斷它是不是閏年。閏年:能被4整除但不能被100整除,或者能被400整除。publicclassex3_1{ publicstaticvoidmain(String[]args)throwsIOException{ intyear; booleanIsLeapYear;System.out.println("Entertheyear:");BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));year=(newInteger(in.readLine())).intValue();

3.1.1if選擇結(jié)構(gòu)(續(xù))

——ex3_1.java方法的控制流程6精選2021版課件

IsLeapYear=((year%4==0&&year%100!=0)||(year%400==0));

if(IsLeapYear){System.out.print(year);System.out.println("isaleapyear");}else{System.out.print(year);System.out.println("isnotaleapyear");}}}3.1.1if選擇結(jié)構(gòu)(續(xù))

——ex3_1.java方法的控制流程7精選2021版課件輸入兩個整數(shù)比較大小importjava.io.*;publicclassex3_2{publicstaticvoidmain(String[]args)throwsIOException{intx,y;BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));System.out.println("Enterxandy:");x=(newInteger(in.readLine())).intValue();y=(newInteger(in.readLine())).intValue();

if(x!=y)

if(x>y)System.out.println("x>y");elseSystem.out.println("x<y");

elseSystem.out.println("x=y");}}3.1.1if選擇結(jié)構(gòu)(續(xù))

——ex3_2.java方法的控制流程8精選2021版課件例子:If(a>b)System.out.println("Thelargeroneis:"+a);elseSystem.out.println("Thelargeroneis:"+b);用條件運算符重寫:System.out.println("Thelargeroneis:"+(a>b)?a:b);3.1.1if選擇結(jié)構(gòu)(續(xù))

——以條件運算符代替if_else方法的控制流程9精選2021版課件計算每個月的天數(shù)staticintdaysInMonth(intmonth){

if(month==2)return(28);

elseif((month==4)||(month==6)||(month==9)||(month==11))

return(30);

elsereturn(31);}方法的控制流程3.1.1if選擇結(jié)構(gòu)(續(xù))

——例3_110精選2021版課件已知一個學生的分數(shù),給出其分數(shù)等級。90-100分為A級;80-89分為B級;70-79分為C級;60-69分為D級;0-59分為E級publicclassIfElseDemo{publicstaticvoidmain(String[]args){inttestscore=76;chargrade;

if(testscore>=90){grade='A';}

elseif(testscore>=80){grade='B';}

elseif(testscore>=70){grade='C';}

elseif(testscore>=60){grade='D';}

else{grade='F';}System.out.println("Grade="+grade);}}程序輸出:Grade=C3.1.1if選擇結(jié)構(gòu)(續(xù))

——ifElseDemo.java方法的控制流程11精選2021版課件3.1.2switch選擇結(jié)構(gòu)switch語句是多分支的選擇結(jié)構(gòu)switch(switch-expression){

casevalue1:statementsforcase1;break;

casevalue2:statementsforcase2;break;...

casevalueN:statementsforcaseN;break;

default:statementsfordefaultcase;break;}注意問題switch-expression、常量值value1到valueN必須是整形或字符型如果表達式的值和某個case后面的值相同,則從該case之后開始執(zhí)行,直到break語句為止default是可有可無的,若沒有一個常量與表達式的值相同,則從default之后開始執(zhí)行方法的控制流程12精選2021版課件if(i==1) {statementA();}elseif(i==2) {statementB();}elseif((i==3)||(i==4)) {statementC();}elseif(i==5) {statementD();}else

{ statementF();}switch(i){

case

1: statementA();break;

case

2: statementB();break;

case

3:

case

4: statementC();break;

case

5: statementD();break;

default:statementF();}3.1.2switch選擇結(jié)構(gòu)(續(xù))

——用switch代替if方法的控制流程13精選2021版課件使用switch結(jié)構(gòu)計算每個月的天數(shù)staticintdaysInMonth(intmonth){intdays;

switch(month){

case2:days=28;break;

case4:

case6:

case9:

case11:days=30;break;

default:days=31;}return(days);}3.1.2switch選擇結(jié)構(gòu)(續(xù))

——例3_2方法的控制流程14精選2021版課件用switch語句實現(xiàn)成績分類的功能publicclassGrade{ publicstaticchargradeLevel(doubleg){ intn=(int)Math.floor(g/10); switch(n){ case10: case9:return('A'); case8:return('B'); case7:return('C'); case6:return('D'); default:return('E'); }}

3.1.2switch選擇結(jié)構(gòu)(續(xù))

——例3_3方法的控制流程15精選2021版課件publicstaticvoidmain(String[]args){ System.out.println("gradeLevel(100)="+gradeLevel(100));System.out.println("gradeLevel(95.5)="+gradeLevel(95.5));System.out.println("gradeLevel(88)="+gradeLevel(88));System.out.println("gradeLevel(72)="+gradeLevel(72));System.out.println("gradeLevel(68.5)="+gradeLevel(68.5));System.out.println("gradeLevel(60)="+gradeLevel(60));System.out.println("gradeLevel(59.5)="+gradeLevel(59.5));System.out.println("gradeLevel(35)="+gradeLevel(35));}}3.1.2switch選擇結(jié)構(gòu)(續(xù))

——例3_3方法的控制流程16精選2021版課件ex3_3輸入0~6之間的某一個整數(shù),然后把它轉(zhuǎn)換成星期輸出。(0對應星期日)importjava.io.*;publicclassex3_3{publicstaticvoidmain(String[]args)throwsIOException{intday;BufferedReaderin=newBufferedReader( newInputStreamReader(System.in));day=(newInteger(in.readLine())).intValue();3.1.2switch選擇結(jié)構(gòu)(續(xù))

——補充ex3_3.java方法的控制流程17精選2021版課件switch(day) { case0:System.out.println("Sunday");break; case1:System.out.println("Monday");break; case2:System.out.println("Tuesday");break;case3:System.out.println("Wednesday");break; case4:System.out.println("Thursday");break; case5:System.out.println("Friday");break; case6:System.out.println("Saturday");break; default:System.out.println("DayoutofrangeSunday..Saturday");break; }}}3.1.2switch選擇結(jié)構(gòu)(續(xù))

——補充ex3_3.java方法的控制流程18精選2021版課件for循環(huán)結(jié)構(gòu)是Java三個循環(huán)語句中功能較強、使用較廣泛的一個for循環(huán)可以嵌套一般語法格式如下for(start-expression;check-expression;update-expression){//bodyoftheloop;}解釋start-expression完成循環(huán)變量和其他變量的初始化工作check-expression是返回布爾值的條件表達式,用于判斷循環(huán)是否繼續(xù)update-expression用來修整循環(huán)變量,改變循環(huán)條件三個表達式之間用分號隔開3.1.3for循環(huán)結(jié)構(gòu)方法的控制流程19精選2021版課件For語句的執(zhí)行過程首先根據(jù)初始表達式start-expression,完成必要的初始化工作;再判斷表達式check-expression的值,若為真,則執(zhí)行循環(huán)體執(zhí)行完循環(huán)體后再返回表達式update-expression,計算并修改循環(huán)條件,這樣一輪循環(huán)就結(jié)束了第二輪循環(huán)從計算并判斷表達式check-expression開始,若表達式的值仍為真,則循環(huán)繼續(xù),否則跳出整個for語句執(zhí)行for循環(huán)下面的句子3.1.3for循環(huán)結(jié)構(gòu)(續(xù))方法的控制流程20精選2021版課件打印九九乘數(shù)表publicclassMultiTable{ publicstaticvoidmain(String[]args){ for(inti=1;i<=9;i++){ for(intj=1;j<=i;j++) System.out.print(""+i+"*"+j+"="+i*j); System.out.println();}}} 3.1.3for循環(huán)結(jié)構(gòu)(續(xù))方法的控制流程21精選2021版課件運行結(jié)果如下:

1*1=1 2*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=813.1.3for循環(huán)結(jié)構(gòu)(續(xù))

——運行結(jié)果22精選2021版課件輸入一個整數(shù),輸出它所有的因數(shù)importjava.io.*;publicclassex3_7{ publicstaticvoidmain(String[]args)throwsIOException{ intn,k; BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));System.out.println("Enterapositiveinteger:");n=(newInteger(in.readLine())).intValue();System.out.print("Number"+n+"Factors");for(k=1;k<=n;k++) if(n%k==0)System.out.print(k+"");System.out.println();}}3.1.3for循環(huán)結(jié)構(gòu)(續(xù))

——補充ex3_7.java方法的控制流程23精選2021版課件逗號運算符可用在for循環(huán)控制表達式的初始化和遞增兩部分。在這兩部分中可以存在多個由逗號分隔的語句,這些語句會被依次計算publicclassex3_8{ publicstaticvoidmain(String[]args){ for(inti=1,j=i+10;i<5;i++,j=i*2){ System.out.println("i="+i+"j="+j); } }}3.1.3for循環(huán)結(jié)構(gòu)(續(xù))

——逗號運算符方法的控制流程24精選2021版課件while語句實現(xiàn)“當型”循環(huán),其一般語法格式如下:while(check-expression){//bodyoftheloop;}解釋條件表達式(check-expression)的返回值為布爾型循環(huán)體可以是單個語句,也可以是復合語句塊執(zhí)行過程先判斷check-expression的值,為真則執(zhí)行循環(huán)體循環(huán)體執(zhí)行完后再無條件轉(zhuǎn)向條件表達式做計算與判斷;當計算出條件表達式的值為假時,跳過循環(huán)體執(zhí)行while語句后面的語句。若為真,則繼續(xù)執(zhí)行循環(huán)3.1.4while循環(huán)結(jié)構(gòu)方法的控制流程25精選2021版課件循環(huán)接受并輸出從鍵盤輸入的字符,直到輸入的字符為回車為止charch=’a’;while(ch!=’\n’){ System.out.println(ch); ch=(char)System.in.read();//接收鍵盤輸入}3.1.4while循環(huán)結(jié)構(gòu)(續(xù))方法的控制流程26精選2021版課件計算數(shù)列1,2,…,10的和。publicclassex3_4{ publicstaticvoidmain(String[]args) { inti=1,sum=0;

while(i<=10){ sum+=i;i++;}System.out.println("sum="+sum);}}3.1.4while循環(huán)結(jié)構(gòu)(續(xù))

——補充ex3_4.java方法的控制流程27精選2021版課件計算存款收益:假設銀行中存款10000元,按11.25%的利率,一年后連本帶利將變?yōu)?1125元。你若將此款繼續(xù)存入銀行,試問多長時間就會連本帶利翻一番importjava.text.*;publicclassExamp3_4{ publicstaticvoidmain(String[]args){ doubleoriginal,money,interest; intyears=0; original=money=10000;interest=11.25/100;System.out.println("yearmoney");

3.1.4while循環(huán)結(jié)構(gòu)(續(xù))

——例3_4方法的控制流程28精選2021版課件while(money<2*original){years=years+1;money=money+(interest*money);System.out.println(""+years+""+newDecimalFormat("0.00").format(money));}System.out.println();System.out.println("第"+years+"年存款額達到"+

newDecimalFormat("0.00").format(money)+"元。");}}3.1.4while循環(huán)結(jié)構(gòu)(續(xù))

——例3_4方法的控制流程29精選2021版課件運行結(jié)果yearmoney111125.00212376.56313768.93415317.93517041.20618958.33721091.14

第7年存款額達到21091.14元。3.1.4while循環(huán)結(jié)構(gòu)(續(xù))

——例3_4運行結(jié)果方法的控制流程30精選2021版課件do-while語句實現(xiàn)“直到型”循環(huán)一般語法結(jié)構(gòu)如下do{//bodyoftheloop;}while(check-expression);其使用與while語句很類似,不同的是它首先無條件的執(zhí)行一遍循環(huán)體,再來判斷條件表達式的值,若表達式的值為真,則再運行循環(huán)體,否則跳出do-while循環(huán),執(zhí)行下面的語句特點:它的循環(huán)體至少要執(zhí)行一次3.1.5do-while循環(huán)結(jié)構(gòu)方法的控制流程31精選2021版課件//…while(i<=10){sum+=i;i++;}System.out.println("sum="+sum);//…

do{sum+=i;i++;}while(i<=10);System.out.println("sum="+sum);比較這兩段程序3.1.5do-while循環(huán)結(jié)構(gòu)(續(xù))方法的控制流程32精選2021版課件輸入一個整數(shù),然后輸出它的翻轉(zhuǎn)形式importjava.io.*;publicclassex3_5{ publicstaticvoidmain(String[]args)throwsIOException{ intn,right_digit,newnum=0;BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));System.out.println("Enterthenumber:");n=(newInteger(in.readLine())).intValue();System.out.print("Thenumberinreverseorderis");

do{ right_digit=n%10; System.out.print(right_digit); n/=10; } while(n!=0);System.out.println(); }}3.1.5do-while循環(huán)結(jié)構(gòu)(續(xù))

——補充ex3_5.java方法的控制流程33精選2021版課件功能跳出循環(huán),不再執(zhí)行剩余部分適用場合在switch結(jié)構(gòu)中,用來終止switch語句的執(zhí)行在for循環(huán)及while循環(huán)結(jié)構(gòu)中,用于終止break語句所在的最內(nèi)層循環(huán);與標號一同使用時,將跳出標號所標識的循環(huán)也可用在代碼塊中,用于跳出它所指定的塊3.1.6break語句方法的控制流程34精選2021版課件簡單break應用舉例publicclassBreakTest{ publicstaticvoidmain(Stringargs[]){ Stringoutput=""; inti; for(i=1;i<=10;i++){ if(i==5)break;

//breaklooponlyifcount==5 output+=i+"";}output+="\nBrokeoutofloopati="+i;System.out.println(output);}}方法的控制流程3.1.6break語句(續(xù))

——例3_535精選2021版課件運行結(jié)果1234Brokeoutofloopati=5解釋執(zhí)行break語句時,程序流程跳出for循環(huán)3.1.6break語句(續(xù))

——例3_5運行結(jié)果方法的控制流程36精選2021版課件在嵌套循環(huán)中使用break語句:使用下面的程序來實現(xiàn)例3-4的九九乘法表publicclassExamp3_6{ publicstaticvoidmain(String[]args){ for(inti=1;i<=9;i++){for(intj=1;j<=9;j++){if(j>i)break;System.out.print(""+i+"*"+j+"="+i*j);}System.out.println(); }}}3.1.6break語句(續(xù))

——例3_6方法的控制流程37精選2021版課件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(); }}}3.1.6break語句(續(xù))

——例3_7方法的控制流程38精選2021版課件運行結(jié)果1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=25說明第一個break語句跳出內(nèi)層循環(huán)第二個breakouter語句則跳出標號outer所標識的循環(huán),即外重循環(huán)3.1.6break語句(續(xù))

——例3_7運行結(jié)果方法的控制流程39精選2021版課件continue語句必須用于循環(huán)結(jié)構(gòu)中停止本次迭代,回到循環(huán)起始處,開始下一次迭代過程有兩種使用格式不帶標號的continue語句終止當前這一輪的循環(huán),跳出本輪循環(huán)剩余的語句,直接進入當前循環(huán)的下一輪帶標號的continue語句使程序的流程直接轉(zhuǎn)入標號標明的循環(huán)層次3.1.7continue語句方法的控制流程40精選2021版課件不帶標號的continue語句在while或do-while循環(huán)中,會使流程直接跳轉(zhuǎn)至條件表達式在for循環(huán)中,會使流程跳轉(zhuǎn)至表達式update-expression,計算并修改循環(huán)變量后再判斷循環(huán)條件3.1.7continue語句(續(xù))

——不帶標號的continue語句方法的控制流程41精選2021版課件簡單的continue語句舉例publicclassContinueTest{ publicstaticvoidmain(Stringargs[]){ Stringoutput=""; inti;for(i=1;i<=10;i++){if(i==5)continue;//skipremainingcodeinthisloopoutput+=i+"";}output+="\nUsingcontinuetoskipprinting5";output+="\ni="+i;System.out.println(output);}}3.1.7continue語句(續(xù))

——例3_8方法的控制流程42精選2021版課件運行結(jié)果1234678910Usingcontinuetoskipprinting5i=11說明continue語句并沒有跳出循環(huán)體,而是跳過本次循環(huán),進入下一輪循環(huán)3.1.7continue語句(續(xù))

——例3_8運行結(jié)果方法的控制流程43精選2021版課件打印2到9之間的偶數(shù)的平方,但是不包括偶數(shù)6的平方publicclassExamp3_9{ publicstaticvoidmain(Stringargs[]) { for(inti=2;i<=9;i+=2) {if(i==6) continue; System.out.println(i*i); }}}3.1.7continue語句(續(xù))

——例3_9方法的控制流程44精選2021版課件帶標號的continue語句格式如下continuelabel;標號label應該定義在程序中某一循環(huán)語句前面,用來標志這個循環(huán)結(jié)構(gòu)3.1.7continue語句(續(xù))

——帶標號的continue語句方法的控制流程45精選2021版課件九九乘法表也可用下面的程序來實現(xiàn)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); } }}當執(zhí)行到滿足條件i<j時,跳出inner循環(huán),直接跳到outer循環(huán),計算并修改i的值,進行下一輪的循環(huán)3.1.7continue語句(續(xù))

——例3_10方法的控制流程46精選2021版課件異常處理在進行程序設計時,錯誤的產(chǎn)生是不可避免的。所謂錯誤,是在程序運行過程中發(fā)生的異常事件,這些事件的發(fā)生將阻止程序的正常運行如何處理錯誤?把錯誤交給誰去處理?程序又該如何從錯誤中恢復?為了加強程序的魯棒性,Java語言具有特定的運行錯誤處理機制3.2異常處理簡介47精選2021版課件3.2.1異常處理的意義異常的基本概念又稱為例外,是特殊的運行錯誤對象是面向?qū)ο笠?guī)范的一部分,是異常類的對象Java中聲明了很多異常類,每個異常類都代表了一種運行錯誤,類中包含了該運行錯誤的信息處理錯誤的方法每當Java程序運行過程中發(fā)生一個可識別的運行錯誤時,即該錯誤有一個異常類與之相對應時,系統(tǒng)都會產(chǎn)生一個相應的該異常類的對象,即產(chǎn)生一個異常異常處理簡介48精選2021版課件java處理錯誤的方法拋出(throw)異常在方法的運行過程中,如果發(fā)生了異常,則該方法生成一個代表該異常的對象并把它交給運行時系統(tǒng),運行時系統(tǒng)便尋找相應的代碼來處理這一異常捕獲(catch)異常運行時系統(tǒng)在方法的調(diào)用棧中查找,從生成異常的方法開始進行回溯,直到找到包含相應異常處理的方法為止3.2.1異常處理的意義(續(xù))異常處理簡介49精選2021版課件Method4Method3Method2Method1探測拋出異常捕獲處理異常調(diào)用3.2.1異常處理的意義(續(xù))

——異常處理示意圖異常處理簡介50精選2021版課件Java異常處理機制的優(yōu)點將錯誤處理代碼從常規(guī)代碼中分離出來按錯誤類型和差別分組對無法預測的錯誤的捕獲和處理克服了傳統(tǒng)方法的錯誤信息有限的問題把錯誤傳播給調(diào)用堆棧3.2.1異常處理的意義(續(xù))異常處理簡介51精選2021版課件3.2.2錯誤的概念錯誤程序運行過程中發(fā)生的異常事件根據(jù)錯誤的嚴重程度不同,可分為兩類錯誤致命性的,用戶程序無法處理Error類是所有錯誤類的父類異常非致命性的,可編制程序捕獲和處理Exception類是所有異常類的父類異常處理簡介52精選2021版課件再對異常進行分類非檢查型異常不能期望程序捕獲的異常(例如數(shù)組越界,除零等)繼承自RuntimeException在方法中不需要聲明,編譯器也不進行檢查檢查型異常其他類型的異常如果被調(diào)用的方法拋出一個類型為E的檢查型異常,那么調(diào)用者必須捕獲E或者也聲明拋出E(或者E的一個父類),對此編譯器要進行檢查3.2.2錯誤的概念(續(xù))異常處理簡介53精選2021版課件3.2.2錯誤的概念(續(xù))

——異常和錯誤類的層次結(jié)構(gòu)異常處理簡介54精選2021版課件Java預定義的一些常見異常ArithmeticException整數(shù)除法中除數(shù)為0NullPointerException

訪問的對象還沒有實例化NegativeArraySizeException創(chuàng)建數(shù)組時元素個數(shù)是負數(shù)ArrayIndexOutOfBoundsException訪問數(shù)組元素時,數(shù)組下標越界ArrayStoreException程序試圖向數(shù)組中存取錯誤類型的數(shù)據(jù)FileNotFoundException試圖存取一個并不存在的文件IOException通常的I/O錯誤3.2.2錯誤的概念(續(xù))

——預定義的一些常見異常異常處理簡介非檢查型異常檢查型異常55精選2021版課件測試系統(tǒng)定義的運行異常——數(shù)組越界出現(xiàn)的異常importjava.io.*;publicclassHelloWorld{ publicstaticvoidmain(Stringargs[]){ inti=0; Stringgreetings[]={"Helloworld!","No,Imeanit!", "HELLOWORLD!!"}; while(i<4){ System.out.println(greetings[i]); i++; } }}3.2.2錯誤的概念(續(xù))

——例3_11異常處理簡介56精選2021版課件運行結(jié)果Helloworld!No,Imeanit!HELLOWORLD!!Exceptioninthread"main"java.lang.ArrayIndexOutOfBoundsExceptionatHelloWorld.main(HelloWorld.java:7)說明訪問數(shù)組下標越界,導致ArrayIndexOutOfBoundsException異常該異常是系統(tǒng)定義好的類,對應系統(tǒng)可識別的錯誤,所以Java虛擬會自動中止程序的執(zhí)行流程,并新建一個該異常類的對象,即拋出數(shù)組出界異常3.2.2錯誤的概念(續(xù))

——例3_11運行結(jié)果異常處理簡介57精選2021版課件3.2.3異常的處理對于檢查型異常,Java強迫程序必須進行處理。處理方法有兩種:聲明拋出異常不在當前方法內(nèi)處理異常,而是把異常拋出到調(diào)用方法中捕獲異常使用try{}catch(){}塊,捕獲到所發(fā)生的異常,并進行相應的處理異常處理簡介58精選2021版課件聲明拋出異常如果程序員不想在當前方法內(nèi)處理異常,可以使用throws子句聲明將異常拋出到調(diào)用方法中如果所有的方法都選擇了拋出此異常,最后JVM將捕獲它,輸出相關的錯誤信息,并終止程序的運行。在異常被拋出的過程中,任何方法都可以捕獲它并進行相應的處理3.2.3異常的處理(續(xù))

——聲明拋出異常異常處理簡介59精選2021版課件3.2.3異常的處理(續(xù))

——一個例子publicvoidopenThisFile(StringfileName)

throwsjava.io.FileNotFoundException{

//codeformethod}publicvoidgetCustomerInfo()

throwsjava.io.FileNotFoundException{

//dosomething

this.openThisFile("customer.txt");

//dosomething

}如果在openThisFile中拋出了FileNotfoundException異常,getCustomerInfo將停止執(zhí)行,并將此異常傳送給它的調(diào)用者異常處理簡介60精選2021版課件語法格式try{statement(s)}catch(exceptiontypename){statement(s)}finally{statement(s)}3.2.3異常的處理(續(xù))

——捕獲異常異常處理簡介61精選2021版課件說明try語句其后跟隨可能產(chǎn)生異常的代碼塊catch語句其后跟隨異常處理語句,通常用到兩個方法getMessage()–返回一個字符串對發(fā)生的異常進行描述。

printStackTrace()–給出方法的調(diào)用序列,一直到異常的產(chǎn)生位置

finally語句不論在try代碼段是否產(chǎn)生異常,finally后的程序代碼段都會被執(zhí)行。通常在這里釋放內(nèi)存以外的其他資源注意事項在類層次樹中,一般的異常類型放在后面,特殊的放在前面3.2.3異常的處理(續(xù))

——捕獲異常異常處理簡介62精選2021版課件讀入兩個整數(shù),第一個數(shù)除以第二個數(shù),之后輸出importjava.io.*;publicclassExceptionTester{publicstaticvoidmain(Stringargs[]){System.out.println("Enterthefirstnumber:");intnumber1=Keyboard.getInteger();System.out.println("Enterthesecondnumber:");intnumber2=Keyboard.getInteger();System.out.print(number1+"/"+number2+"=");intresult=number1/number2;System.out.println(result);}}3.2.3異常的處理(續(xù))

——例3_12異常處理簡介63精選2021版課件其中,Keyboard類的聲明如下importjava.io.*;publicclassKeyboard{ staticBufferedReaderinputStream=newBufferedReader(newInputStreamReader(System.in));

publicstaticintgetInteger(){ try{return(Integer.valueOf(inputStream.readLine().trim()).intValue());}catch(Exceptione){

e.printStackTrace();return0;}}publicstaticStringgetString(){try{ return(inputStream.readLine());}catch(IOExceptione){return"0";}}}3.2.3異常的處理(續(xù))

——例3_12異常處理簡介64精選2021版課件運行結(jié)果Enterthefirstnumber:140Enterthesecondnumber:abcjava.lang.NumberFormatException:abcatjava.lang.Integer.parseInt(Integer.java:426)atjava.lang.Integer.valueOf(Integer.java:532)atKeyboard.getInteger(Keyboard.java:10)atExceptionTester.main(ExceptionTester.java:7)140/0=Exceptioninthread"main"java.lang.ArithmeticException:/byzeroatExceptionTester.main(ExceptionTester.java:10)3.2.3異常的處理(續(xù))

——例3_12運行結(jié)果異常處理簡介65精選2021版課件捕獲NumberFormatException類型的異常importjava.io.*;publicclassExceptionTester2{publicstaticvoidmain(Stringargs[]){intnumber1=0,number2=0;

try{System.out.println("Enterthefirstnumber:");number1=Integer.valueOf(Keyboard.getString()).intValue();System.out.println("Enterthesecondnumber:");number2=Integer.valueOf(Keyboard.getString()).intValue();}catch(NumberFormatExceptione){System.out.println("Thosewerenotproperintegers!Iquit!");System.exit(-1);} System.out.print(number1+"/"+number2+"=");intresult=number1/number2;System.out.println(result);}}異常處理簡介3.2.3異常的處理(續(xù))

——例3_1366精選2021版課件運行結(jié)果Enterthefirstnumber:abcThosewerenotproperintegers!Iquit!異常處理簡介3.2.3異常的處理(續(xù))

——例3_13運行結(jié)果67精選2021版課件捕獲被零除的異常(ArithmeticException類型的異常)try{System.out.println("Enterthefirstnumber:");number1=Integer.valueOf(Keyboard.getString()).intValue();System.out.println("Enterthesecondnumber:");number2=Integer.valueOf(Keyboard.getString()).intValue();result=number1/number2;}catch(NumberFormatExceptione){System.out.println("Invalidintegerentered!");System.exit(-1);}

catch(ArithmeticExceptione){System.out.println("Secondnumberis0,cannotdodivision!");System.exit(-1);}異常處理簡介3.2.3異常的處理(續(xù))

——例3_1468精選2021版課件運行結(jié)果Enterthefirstnumber:143Enterthesecondnumber:0Secondnumberis0,cannotdodivision!異常處理簡介3.2.3異常的處理(續(xù))

——例3_14運行結(jié)果69精選2021版課件對程序進行改進:重復提示輸入,直到輸入合法的數(shù)據(jù)。為了避免代碼重復,可將數(shù)據(jù)存入數(shù)組importjava.io.*;publicclassExceptionTester4{publicstaticvoidmain(Stringargs[]){intresult;intnumber[]=newint[2];booleanvalid;for(inti=0;i<2;i++){

valid=false;

while(!valid){

try{System.out.println("Enternumber"+(i+1)); number[i]=Integer.valueOf(Keyboard.getString()).intValue();valid=true;}catch(NumberFormatExceptione){System.out.println("Invalidintegerentered.Pleasetryagain.");}}}異常處理簡介3.2.3異常的處理(續(xù))

——例3_14改進70精選2021版課件

try{result=number[0]/number[1];System.out.print(number[0]+"/"+ number[1]+"="+result);}catch(ArithmeticExceptione){System.out.println("Secondnumberis0, cannotdodivision!");}}}3.2.3異常的處理(續(xù))

——例3_14改進71精選2021版課件運行結(jié)果Enternumber1abcInvalidintegerentered.Pleasetryagain.Enternumber1efgInvalidintegerentered.Pleasetryagain.Enternumber1143Enternumber2abcInvalidintegerentered.Pleasetryagain.Enternumber240143/40=33.2.3異常的處理(續(xù))

——例3_14運行結(jié)果72精選2021版課件3.2.4生成異常對象生成異常對象三種方式由Java虛擬機生成由Java類庫中的某些類生成在程序中生成自己的異常對象,也即是異??梢圆皇浅鲥e產(chǎn)生,而是人為地拋出生成異常對象都是通過throw語句實現(xiàn),生成的異常對象必須是Throwable或其子類的實例thrownewThrowableObject();ArithmeticExceptione=newArithmeticException();throwe;73精選2021版課件生成異常對象舉例classThrowTest{publicstaticvoidmain(Stringargs[]){

try{thrownewArithmeticException();}catch(ArithmeticExceptionae){System.out.println(ae);}

try{thrownewArrayIndexOutOfBoundsException();}catch(ArrayIndexOutOfBoundsExceptionai){System.out.println(ai);}

try{thrownewStringIndexOutOfBoundsException();}catch(StringIndexOutOfBoundsExceptionsi){System.out.println(si);}}}3.2.4生成異常對象(續(xù))

——例3_1674精選2021版課件運行結(jié)果java.lang.ArithmeticExceptionjava.lang.ArrayIndexOutOfBoundsExceptionjava.lang.StringIndexOutOfBoundsException3.2.4生成異常對象(續(xù))

——例3_16運行結(jié)果75精選2021版課件3.2.5聲明自己的異常類聲明自己的異常類除使用系統(tǒng)預定義的異常類外,用戶還可聲明自己的異常類

自定義的所有異常類都必須是Exception的子類一般的聲明方法如下

publicclassMyExceptionNameextendsSuperclassOfMyException{publicMyExceptionName(){super("Somestringexplainingtheexception");}}76精選2021版課件聲明當除數(shù)為零時拋出的異常類DivideByZeroExceptionpublicclassDivideByZeroExceptionextendsArithmeticException{publicDivideByZeroException(){super("Attemptedtodividebyzero");}}importjava.io.*;publicclassExamp3_16{privatestaticintquotient(intnumerator,intdenominator)

throwsDivideByZ

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論