久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

JAVA教程 第四講 Java的例外處理和I/O流(一)

瀏覽:2日期:2024-03-06 08:13:20

4.1 什么是例外

例外就是在程序的運(yùn)行過程中所發(fā)生的異常事件,它中斷指令的正常執(zhí)行。Java中提供了一種獨(dú)特的處理例外的機(jī)制,通過例外來處理程序設(shè)計(jì)中出現(xiàn)的錯誤。

4.1.1 例外示例

【例4-1】

import java.io.*;

class ExceptionDemo1{

public static void main( String args[ ] ){

 FileInputStream fis = new FileInputStream( 'text' );

 int b;

 while( (b=fis.read())!=-1 ){

System.out.print( b );

 }

 fis.close( );

}

 }

查看編譯結(jié)果

【例4-2】

class ExceptionDemo2{

public static void main( String args[ ] ){

 int a = 0;

 System.out.println( 5/a );

}

}

運(yùn)行結(jié)果

C:>javac ExceptionDemo2.java

C:>java ExceptionDemo2

java.lang.ArithmeticException: / by zero at

ExceptionDemo2.main(ExceptionDemo2.java:4)

因?yàn)槌龜?shù)不能為0,所以在程序運(yùn)行的時候出現(xiàn)了除0溢出的異常事件。為什么有的例外在編譯時出現(xiàn),而有的例外是在運(yùn)行時出現(xiàn)的?讓我們繼續(xù)學(xué)習(xí)java 的例外處理機(jī)制。

4.1.2 例外處理機(jī)制

拋棄(throw)例外:

在Java程序的執(zhí)行過程中,如果出現(xiàn)了異常事件,就會生成一個例外對象。生成的例外對象將傳遞給Java運(yùn)行時系統(tǒng),這一例外的產(chǎn)生和提交過程稱為拋棄(throw)例外

兩種處理例外的機(jī)制:

◇ 捕獲例外:

當(dāng)Java運(yùn)行時系統(tǒng)得到一個例外對象時,它將會沿著方法的調(diào)用棧逐層回溯,尋找處理這一例外的代碼。找到能夠處理這種類型的例外的方法后,運(yùn)行時系統(tǒng)把當(dāng)前例外對象交給這個方法進(jìn)行處理,這一過程稱為捕獲(catch)例外。這是積極的例外處理機(jī)制。如果Java運(yùn)行時系統(tǒng)找不到可以捕獲例外的方法,則運(yùn)行時系統(tǒng)將終止,相應(yīng)的Java程序也將退出。

◇ 聲明拋棄例外:

如果一個方法并不知道如何處理所出現(xiàn)的例外,則可在方法聲明時,聲明拋棄(throws)例外。這是一種消極的例外處理機(jī)制。

4.1.3 例外類的層次

在jdk中,每個包中都定義了例外類,而所有的例外類都直接或間接地繼承于Throwable類。圖4-1為jdk中例外類的繼承關(guān)系。

java中的例外類可分為兩大類:

Error

動態(tài)鏈接失敗,虛擬機(jī)錯誤等,通常Java程序不應(yīng)該捕獲這類例外,也不會拋棄這種例外。

Exception

1)運(yùn)行時例外:

繼承于RuntimeException的類都屬于運(yùn)行時例外,例如算術(shù)例外(除零錯)、數(shù)組下標(biāo)越界例外等等。由于這些例外產(chǎn)生的位置是未知的,Java 編譯器允許程序員在程序中不對它們做出處理。

2)非運(yùn)行時例外:

除了運(yùn)行時例外之外的其他由Exception 繼承來的例外類都是非運(yùn)行時的例外,例如FileNotFoundException(文件未找到例外)。Java編譯器要求在程序中必須處理這種例外,捕獲例外或者聲明拋棄例外。

4.2 例外的處理

java語言中有兩種例外處理機(jī)制:捕獲例外和聲明拋棄例外。下面我們做詳細(xì)介紹。

4.2.1 捕獲例外

捕獲例外是通過try-catch-finally語句實(shí)現(xiàn)的。

try{

......

 }catch( ExceptionName1 e ){

 ......

 }catch( ExceptionName2 e ){

 ......

 }

 ......

 }finally{

 ......

}

◇ try

捕獲例外的第一步是用try{…}選定捕獲例外的范圍,由try所限定的代碼塊中的語句在執(zhí)行過程中可能會生成例外對象并拋棄。

◇ catch

每個try代碼塊可以伴隨一個或多個catch語句,用于處理try代碼塊中所生成的例外事件。catch語句只需要一個形式參數(shù)指明它所能夠捕獲的例外類型,這個類必須是Throwable的子類,運(yùn)行時系統(tǒng)通過參數(shù)值把被拋棄的例外對象傳遞給catch塊。

在catch塊中是對例外對象進(jìn)行處理的代碼,與訪問其它對象一樣,可以訪問一個例外對象的變量或調(diào)用它的方法。getMessage( )是類Throwable所提供的方法,用來得到有關(guān)異常事件的信息,類Throwable還提供了方法printStackTrace( )用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內(nèi)容。例如:

try{

......

 }catch( FileNotFoundException e ){

System.out.println( e );

System.out.println( 'message: '+e.getMessage() );

e.printStackTrace( System.out );

 }catch( IOException e ){

System.out.println( e );

 }

catch 語句的順序:

捕獲例外的順序和catch語句的順序有關(guān),當(dāng)捕獲到一個例外時,剩下的catch語句就不再進(jìn)行匹配。因此,在安排catch語句的順序時,首先應(yīng)該捕獲最特殊的例外,然后再逐漸一般化。也就是一般先安排子類,再安排父類。

◇ finally

捕獲例外的最后一步是通過finally語句為例外處理提供一個統(tǒng)一的出口,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理。不論在try代碼塊中是否發(fā)生了異常事件,finally塊中的語句都會被執(zhí)行。

4.2.2 聲明拋棄例外

1.聲明拋棄例外

如果在一個方法中生成了一個例外,但是這一方法并不確切地知道該如何對這一異常事件進(jìn)行處理,這時,一個方法就應(yīng)該聲明拋棄例外,使得例外對象可以從調(diào)用棧向后傳播,直到有合適的方法捕獲它為止。

聲明拋棄例外是在一個方法聲明中的throws子句中指明的。例如:

public int read () throws IOException{

......

}

throws子句中同時可以指明多個例外,之間由逗號隔開。例如:

public static void main(String args[]) throws

IOException,IndexOutOfBoundsException {…}

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 精品欧美一区二区三区久久久 | 丰满少妇久久久久久久 | 黄色一级片看看 | 91免费观看 | 日韩一区二区在线观看 | 高清国产一区二区三区四区五区 | 欧美视频一二 | 亚洲成av人片一区二区三区 | 成人在线观看免费视频 | 国产精品久久久久久久久久久久久 | 一区二区三区亚洲视频 | 最新国产中文字幕 | 日韩欧美综合在线 | 欧美视频精品 | 99精品网站| 欧美久久久久 | 91精品国产综合久久久久久丝袜 | 99精品国产高清在线观看 | 亚洲网在线 | 中文字幕乱码亚洲精品一区 | 天堂在线中文 | 在线免费观看成年人视频 | 日韩一区二区不卡 | 日本久久精品一区二区 | 欧美性猛交一区二区三区精品 | 国产免费一区二区三区 | 中文字幕一区二区在线观看 | 国产精品美女久久久久久久久久久 | av大片| 美女福利视频网站 | 国产精品无码久久久久 | 99精品欧美一区二区蜜桃免费 | 久久精品视频亚洲 | 欧美中文字幕在线观看 | 国产精品久久久久久久久免费桃花 | 久草视频网 | 综合色爱 | 麻豆精品一区二区 | 亚洲精品久久久久久一区二区 | 99热在线播放| 男女羞羞网站 |