Java語(yǔ)言程序設(shè)計(jì)第05章-異常處理_第1頁(yè)
Java語(yǔ)言程序設(shè)計(jì)第05章-異常處理_第2頁(yè)
Java語(yǔ)言程序設(shè)計(jì)第05章-異常處理_第3頁(yè)
Java語(yǔ)言程序設(shè)計(jì)第05章-異常處理_第4頁(yè)
Java語(yǔ)言程序設(shè)計(jì)第05章-異常處理_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Java2程序設(shè)計(jì)實(shí)用教程(第2版),第5章 異常處理,5.1 程序錯(cuò)誤與處理 5.2 Java的異常處理,在程序運(yùn)行過(guò)程中,任何中斷正常程序流程的情況都是錯(cuò)誤或異常.Java可以用代碼來(lái)處理異常并繼續(xù)執(zhí)行程序,而不是讓程序中斷. 如: 想打開的文件不存在 網(wǎng)絡(luò)連接中斷 操作數(shù)超出范圍 數(shù)組下標(biāo)越界,不要指望你的程序永遠(yuǎn)不會(huì)出錯(cuò),在java 程序中,一些特殊情況需要處理,分為兩種: (1)錯(cuò)誤:不能處理的范圍(Error)。指程序運(yùn)行時(shí)遇到的硬件或操作系統(tǒng)的錯(cuò)誤。 (2)異常:可以處理的范圍(Exception)。指在 硬件或操作系統(tǒng)正常時(shí),程序遇到的運(yùn)行錯(cuò)。,5.1 Java的錯(cuò)誤和異常,異

2、常處理機(jī)制的優(yōu)越之處,從語(yǔ)法上看,從運(yùn)行效果看,異常處理語(yǔ)句將程序正常代碼與錯(cuò)誤處理代碼分開,使程序結(jié)構(gòu)清晰,算法重點(diǎn)突出,可讀性強(qiáng)。,異常處理語(yǔ)句使程序具有處理錯(cuò)誤的能力。發(fā)生了運(yùn)行錯(cuò),程序能捕獲異常并處理異常.,5.1 Java的錯(cuò)誤和異常,圖5.1 Java程序發(fā)現(xiàn)錯(cuò)誤和異常,錯(cuò)誤類和異常類,(1)Error錯(cuò)誤類 Error類對(duì)象由Java虛擬機(jī)生成并拋給系統(tǒng),有內(nèi)存溢出錯(cuò)誤、棧溢出錯(cuò)誤、動(dòng)態(tài)鏈接錯(cuò)誤等。,(2) Exception異常類 Exception類對(duì)象是Java程序捕獲和處理的對(duì)象。如除數(shù)為0的算術(shù)異常、數(shù)組下標(biāo)越界異常、空指針異常等。,Throwable類,Error錯(cuò)誤

3、類,Exception異常類,java.lang 包,在編譯時(shí)出現(xiàn)的錯(cuò)誤并不是異常,換句話說(shuō),異常就是為了解決程序運(yùn)行時(shí)出現(xiàn)的的錯(cuò)誤.,【例5.1】 發(fā)現(xiàn)除數(shù)為0錯(cuò)。 運(yùn)行時(shí)能夠發(fā)現(xiàn)整數(shù)除法中除數(shù)為0的語(yǔ)義錯(cuò) 運(yùn)行時(shí)不能發(fā)現(xiàn)浮點(diǎn)數(shù)除法中除數(shù)為0的語(yǔ)義錯(cuò),public class q public static void main(String args) int i=6; int j=0; System.out.print(i/j); ,public class q public static void main(String args) int i=6; float j=0.0f; Syst

4、em.out.print(i/j); ,【例5.2】 發(fā)現(xiàn)數(shù)組下標(biāo)越界的語(yǔ)義錯(cuò)。,public class Outofbounds public static void main (String args) int a = 1,2,3,4; for(int i=0;i5;i+) System.out.println( a+i+=+ai); 程序運(yùn)行結(jié)果如下: a0=1 a1=2 a2=3 a3=4 Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 4 at Outofbounds.main(Outofbound

5、s.java:7),5.2 Java的異常處理,5.2.1 異常類說(shuō)明 5.2.2 異常處理語(yǔ)句 5.2.3 拋出異常 5.2.4 自定義異常類,5.2.1 異常類說(shuō)明,Exception異常類 P153,public class Throwable implements Serializable public Throwable() public Throwable(String message) public String getMessage() /獲得異常信息 public String toString() /獲得異常對(duì)象的描述信息 public void printStackTra

6、ce() /顯示異常棧跟蹤信息 ,public class Exception extends Throwable public Exception() public Exception(String s) ,2. RuntimeException運(yùn)行異常類,(1)算術(shù)異常ArithmeticException:除數(shù)為0 (2)空對(duì)象異常NullPointerException int a = null; a0 = 1; /對(duì)空數(shù)組中的元素進(jìn)行操作,產(chǎn)生空對(duì)象異常 String str = null; System.out.println(str.length(); /調(diào)用空對(duì)象的方法,產(chǎn)生空

7、對(duì)象異常,(3)類型強(qiáng)制轉(zhuǎn)換異常ClassCastException Object obj = new Object(); String str = (String) obj; (4)負(fù)數(shù)組長(zhǎng)度異常NegativeArraySizeException int a = new int -1;/產(chǎn)生負(fù)數(shù)組長(zhǎng)度異常,(5)數(shù)組下標(biāo)越界異常ArrayIndexOutOfBoundsException int a = new int1; a1 = 1;/產(chǎn)生數(shù)組下標(biāo)越界異常 (6)數(shù)值格式異常NumberFormatException int j = Integer.parseInt(abc); /產(chǎn)生

8、數(shù)值格式異常,其他異常:,IOException 輸入輸出異常 SQLException 數(shù)據(jù)庫(kù)操作異常,java異常機(jī)制: 首先生成一個(gè)異常的對(duì)象(jvm、程序員),然后拋出去,層層尋找解決方案(方法),如果找到解決的代碼,就停止拋出,沒(méi)有找到,繼續(xù)拋出,直到main()為止。每拋出一層,代碼中斷一層,直到main()中斷,jvm退出。,Java異常處理機(jī)制Java程序的執(zhí)行過(guò)程中如出現(xiàn)異常,會(huì)自動(dòng)生成一個(gè)異常類對(duì)象,該異常對(duì)象將被提交給Java運(yùn)行時(shí)系統(tǒng),這個(gè)過(guò)程稱為拋出(throw)異常。 當(dāng)Java運(yùn)行時(shí)系統(tǒng)接收到異常對(duì)象時(shí),會(huì)尋找能處理這一異常的代碼并把當(dāng)前異常對(duì)象交給其處理,這一過(guò)

9、程稱為捕獲(catch)異常。 如果Java運(yùn)行時(shí)系統(tǒng)找不到可以捕獲異常的方法,則運(yùn)行時(shí)系統(tǒng)將終止,相應(yīng)的Java程序也將退出。 程序員通常只能處理異常(Exception),而對(duì)錯(cuò)誤(Error)無(wú)能為力。,異常處理方案,1.捕獲 (try catch finally) 2.拋出 (throws, throw) 為了編譯能通過(guò)拋出異常,其實(shí)異常對(duì)象沒(méi)有真正被解決,捕獲才是真正解決異常的.,5.2.2 異常處理語(yǔ)句,拋出異常,捕獲異常,處理異常,拋出(throw)異常:,捕獲(catch)異常:,處理異常:,創(chuàng)建一個(gè)異常類對(duì)象的過(guò)程,獲得異常對(duì)象的過(guò)程,對(duì)異常對(duì)象執(zhí)行相應(yīng)操作的過(guò)程,try 語(yǔ)

10、句1 /存在潛在異常的代碼 catch (異常類 異常對(duì)象) 語(yǔ)句2 /捕獲到異常并進(jìn)行處理的代碼 程序發(fā)生指定的異常時(shí),所需采 取的動(dòng)作. finally 語(yǔ)句3 /最后必須執(zhí)行的代碼,無(wú)論是否捕獲到異常 ,1. 異常處理語(yǔ)句語(yǔ)法,【例5.3】 異常的捕獲和處理。 見例題try-catch-finallyTestException.java,public class TestException1 public static void test(int a,int b) a = a/b; System.out.println(try); public static void main(Stri

11、ng args) TestException1.test(4,0); System.out.println(main); ,public class TestException3 public static void test(int a,int b)throws Exception a = a/b; System.out.println(a); public static void main(String args) throws Exception /throws Exception并沒(méi)有解決異常,把處理方式留給調(diào)用者 TestException3.test(4,0); System.ou

12、t.println(main); ,public class TestException2 public static void test(int a,int b) try a = a/b; System.out.println(try); catch(Exception ee) ee.printStackTrace(); System.out.println(catch); finally System.out.println(Must); System.out.println(a); public static void main(String args) TestException2.t

13、est(4,0); System.out.println(main); ,public class Try2 public static void main (String args) int i=0; int a = 5,6,7,8; for(i=0;i5;i+) try System.out.print(a+i+/+i+=+(ai/i); catch(ArrayIndexOutOfBoundsException e) System.out.print(捕獲數(shù)組下標(biāo)越界異常!); catch(ArithmeticException e) System.out.print(捕獲算術(shù)異常!);

14、catch(Exception e) System.out.print(捕獲+e.getMessage()+異常!); /顯示異常信息 finally System.out.println( i=+i); System.out.println(繼續(xù)!); 例5.03 捕獲和處理異常 ,圖5.4 異常處理語(yǔ)句的執(zhí)行流程,public class q public static void main(String args) int i=6,a,j=0; try a=i/j; catch(ArithmeticException e) System.out.print(除數(shù)為0異常); catch(E

15、xception e) System.out.print(其他異常); finally System.out.println(哈哈); ,見例 異常例1除數(shù)為0的異常 import java.io.*; public class TryCatch public static void main(String args) throws IOException BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in); System.out.print(輸入一個(gè)除數(shù):); int n=Integer.parse

16、Int(keyin.readLine(); try int a=100/n; System.out.println(輸入數(shù)據(jù)不為0 ); System.out.println(100/+n+=+a); catch(ArithmeticException e) System.out.println(除數(shù)為0的錯(cuò)誤); ,見 只允許輸入整數(shù)的異常 import java.io.*; public class InputInteger public static void main(String args) int t=0; BufferedReader keyin=new BufferedRead

17、er(new InputStreamReader(System.in);,while( true) System.out.print(輸入一個(gè)整數(shù):); try String in=keyin.readLine(); if (in.equals(end) System.exit(0); t=Integer.parseInt(in); catch(NumberFormatException e) System.out.println(你輸入的不是整數(shù)); continue; break; ,注意:,多個(gè)catch子句需要按照異常類從子類到父類的次序排列。一旦異常對(duì)象被某個(gè)catch子句捕獲并處理

18、后,后面的catch子句將不再捕獲該異常對(duì)象。 2. 通常最后一個(gè)異常類聲明為Exception。 3. Finally子句中的語(yǔ)句是必須執(zhí)行的代碼,如果有些語(yǔ)句必須執(zhí)行,可以放在Finally子句中。,import java.io.*; public class TestThrows public static void main(String args) int t=0; BufferedReader keyin=new BufferedReader (new InputStreamReader(System.in); String i=keyin.readLine(); System.o

19、ut.println(i); 運(yùn)行時(shí)編譯不通過(guò),修改.,import java.io.*; public class TestThrows1 public static void main(String args) throws IOException int t=0; BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in); String i=keyin.readLine(); System.out.println(i); ,import java.io.*; public class TestThrows2 public static void main(String args) int t=0; BufferedReader keyin=new BufferedReader(new InputStreamReader(System.in); try String i=keyin.readLine(); System.out.println(i); catch(IOException e) e.printStackTrace(); ,5.2.3 拋出異常,1. 拋出自定義異常對(duì)象的throw語(yǔ)句 throw 異常對(duì)象,public v

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論