版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第三章 了解異常的定義了解異常的定義 了解異常的分類了解異常的分類 掌握掌握 try、catch 和和 finally 語句的用法語句的用法 掌握掌握throw、throws子句的用法子句的用法 掌握如何定義自己的異常掌握如何定義自己的異常 運(yùn)行時發(fā)生的錯誤稱為異常。處理這些異運(yùn)行時發(fā)生的錯誤稱為異常。處理這些異常就稱為異常處理。常就稱為異常處理。 一旦引發(fā)異常,程序?qū)⑼蝗恢兄?,且控制一旦引發(fā)異常,程序?qū)⑼蝗恢兄?,且控制將返回操作系統(tǒng)。將返回操作系統(tǒng)。 發(fā)生異常后此前分配的所有資源都將保留發(fā)生異常后此前分配的所有資源都將保留在相同的狀態(tài),這將導(dǎo)致資源漏洞。在相同的狀態(tài),這將導(dǎo)致資源漏洞。 Ja
2、va異常處理機(jī)制采用一個統(tǒng)一和相對簡單異常處理機(jī)制采用一個統(tǒng)一和相對簡單的的拋出和處理拋出和處理錯誤的機(jī)制。如果一個方法錯誤的機(jī)制。如果一個方法本身能本身能引發(fā)引發(fā)異常,當(dāng)所調(diào)用的方法出現(xiàn)異異常,當(dāng)所調(diào)用的方法出現(xiàn)異常時,調(diào)用者可以常時,調(diào)用者可以捕獲捕獲異常使之得到處理;異常使之得到處理;也可以也可以回避回避異常,這時異常將在調(diào)用的堆異常,這時異常將在調(diào)用的堆棧中向下傳遞,直到被處理。棧中向下傳遞,直到被處理。所有異常類型都是所有異常類型都是內(nèi)置類內(nèi)置類Throwable的的子類子類用于用于Java運(yùn)行時系運(yùn)行時系統(tǒng)統(tǒng)來顯示與運(yùn)行時系來顯示與運(yùn)行時系統(tǒng)本身有關(guān)的錯誤統(tǒng)本身有關(guān)的錯誤用于用戶程
3、序可能用于用戶程序可能捕獲的異常,也是捕獲的異常,也是用來創(chuàng)建用戶異常用來創(chuàng)建用戶異常類型子類的類。類型子類的類。ErrorError類對象由類對象由JavaJava虛擬機(jī)生成并拋出;虛擬機(jī)生成并拋出;ExceptionException類對象由應(yīng)用程序處理或拋出。類對象由應(yīng)用程序處理或拋出。 由五個關(guān)鍵字由五個關(guān)鍵字 try、catch、throw、throws 和和 finally 處理。處理。 Java 中可用于處理異常的兩種方式:中可用于處理異常的兩種方式:自行處理自行處理:可能引發(fā)異常的語句封入在:可能引發(fā)異常的語句封入在 try 塊塊內(nèi),而處理異常的相應(yīng)語句則封入在內(nèi),而處理異常的
4、相應(yīng)語句則封入在 catch 塊塊內(nèi)。內(nèi)?;乇墚惓;乇墚惓#涸诜椒暶髦邪涸诜椒暶髦邪?throws 子句,子句,通知潛在調(diào)用者,如果發(fā)生了異常,必須由調(diào)通知潛在調(diào)用者,如果發(fā)生了異常,必須由調(diào)用者處理。用者處理。 public class ExceptionDemo public static void main(String args) try int c= calculate(9,0); System.out.println(c); catch (Exception e) System.err.println(發(fā)生異常:發(fā)生異常: + e.toString(); e.printS
5、tackTrace(); static int calculate(int a, int b) int c = a/b; return c; 調(diào)用函數(shù)調(diào)用函數(shù)calculate,將引發(fā)一個異常將引發(fā)一個異常在在catch塊中處塊中處理異常理異常輸出輸出結(jié)果結(jié)果 單個代碼片段可能會引起多個錯誤。單個代碼片段可能會引起多個錯誤。 可提供多個可提供多個 catch 塊塊分別處理各種異常類型分別處理各種異常類型。. . .try catch(ArrayIndexOutOfBoundsException e) catch(Exception e) .ArrayIndexOutOfBoundsExcept
6、ion類為類為 Exception 類的子類,但是如果異常類的子類,但是如果異常屬于屬于ArrayIndexOutOfBoundsException類將執(zhí)行第一個類將執(zhí)行第一個 catch 塊,之后控制塊,之后控制將轉(zhuǎn)向?qū)⑥D(zhuǎn)向try/catch塊之后的語句,所以始終不會執(zhí)行第二個塊之后的語句,所以始終不會執(zhí)行第二個 catch 塊。塊。 class Catch22 public static void main(String args) try String num=args0; int numValue=Integer.parseInt(num);System.out.println(平方為
7、平方為 +numValue*numValue); catch(ArrayIndexOutOfBoundsException ne) System.out.println(未提供任何參數(shù)!未提供任何參數(shù)!); catch(NumberFormatException nb) System.out.println(不是數(shù)字!不是數(shù)字!); 輸出輸出結(jié)果結(jié)果 有時,塊的一部分引起一個錯誤,而整個有時,塊的一部分引起一個錯誤,而整個塊可能又引起另一個錯誤。塊可能又引起另一個錯誤。在此情況下,在此情況下,需要將一個異常處理程序嵌套到另一個中。需要將一個異常處理程序嵌套到另一個中。 在使用嵌套的在使用嵌套的
8、try塊時,塊時,將先執(zhí)行內(nèi)部將先執(zhí)行內(nèi)部 try 塊,塊,如果沒有遇到匹配的如果沒有遇到匹配的 catch 塊,則將檢查外塊,則將檢查外部部 try 塊的塊的 catch 塊。塊。 確保了在出現(xiàn)異常時所有清除工作都將確保了在出現(xiàn)異常時所有清除工作都將得到處理得到處理 與與 try 塊一起使用塊一起使用 無論是否出現(xiàn)異常,無論是否出現(xiàn)異常,finally塊都將運(yùn)行塊都將運(yùn)行finallycatch 塊塊finally異常異常沒有異常沒有異常try 塊塊class FinallyDemo int no1,no2; FinallyDemo(String args) try no1 = Intege
9、r.parseInt(args0); no2 = Integer.parseInt(args1); System.out.println(相除結(jié)果為相除結(jié)果為 +no1/no2); catch(ArithmeticException i) System.out.println(不能除以不能除以 0); finally System.out.println(Finally 已執(zhí)行已執(zhí)行); public static void main(String args) new FinallyDemo(args); 輸出輸出結(jié)果結(jié)果 throw機(jī)制機(jī)制 throws機(jī)制機(jī)制 異常是通過關(guān)鍵字異常是通過關(guān)
10、鍵字 throw 拋出,拋出,程序可以程序可以用用throw語句引發(fā)明確的異常。如:語句引發(fā)明確的異常。如: try if(flag0) throw new NullPointerException(); throw語句的操作數(shù)一定是語句的操作數(shù)一定是Throwable類類類類型或型或Throwable子類類型的一個對象。子類類型的一個對象。 如果一個方法可能導(dǎo)致一個異常但不處理它,如果一個方法可能導(dǎo)致一個異常但不處理它,此時要求在方法聲明中包含此時要求在方法聲明中包含 throws 子句,子句,通知潛在調(diào)用者,如果發(fā)生了異常,由調(diào)用通知潛在調(diào)用者,如果發(fā)生了異常,由調(diào)用者處理。者處理。 一個
11、一個throws子句列舉了一個方法可能引發(fā)的子句列舉了一個方法可能引發(fā)的所有異常類型。所有異常類型。 這對于除這對于除Error或或RuntimeException及它們子類及它們子類以外類型的所有異常是必要的。以外類型的所有異常是必要的。class ThrowsDemo static void throwOne() throws IllegalAccessException System.out.println(在在throwOne中中.); throw new IllegalAccessException(非法訪問異常非法訪問異常); public static void main(Str
12、ing args) try throwOne(); catch(IllegalAccessException e) System.out.println(捕獲捕獲+e); 在該方法中沒有處在該方法中沒有處理異常,只是聲明理異常,只是聲明可能引發(fā)的異??赡芤l(fā)的異常在在throwOne方法方法的調(diào)用函數(shù)中捕的調(diào)用函數(shù)中捕獲并處理異常獲并處理異常 具體案例分析見本書具體案例分析見本書 內(nèi)置異常不可能始終足以捕獲所有錯誤,內(nèi)置異常不可能始終足以捕獲所有錯誤,因此需要用戶自定義的異常類因此需要用戶自定義的異常類 用戶自定義的異常類應(yīng)為用戶自定義的異常類應(yīng)為 Exception 類類(或者(或者Exce
13、ption 類的子類)的子類類的子類)的子類 創(chuàng)建的任何用戶自定義的異常類都可以創(chuàng)建的任何用戶自定義的異常類都可以獲得獲得 Throwable類定義的方法類定義的方法class ArraySizeException extends NegativeArraySizeException ArraySizeException() super(“您傳遞的是非法的數(shù)組大小您傳遞的是非法的數(shù)組大小”); 該類是該類是Exception的子類的子類class UserExceptionDemo int size, array;UserExceptionDemo(int s) size = s;try ch
14、eckSize();catch(ArraySizeException e) System.out.println(e); void checkSize() throws ArraySizeException if(size 0) throw new ArraySizeException();array = new intsize;for(int i = 0; i size; i+) arrayi = i+1; System.out.print(arrayi+ ); public static void main(String arg) new UserExceptionDemo(Integer
15、.parseInt(arg0); 輸出輸出結(jié)果結(jié)果異常異常說明說明RuntimeException java.lang包中包中多數(shù)異常的基類多數(shù)異常的基類 ArithmeticException 算術(shù)錯誤,如除以算術(shù)錯誤,如除以 0 IllegalArgumentException 方法收到非法參數(shù)方法收到非法參數(shù) ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)出界數(shù)組下標(biāo)出界 NullPointerException 試圖訪問試圖訪問 null 對象引用對象引用 SecurityException 試圖違反安全性試圖違反安全性 ClassNotFoundExcepti
16、on不能加載請求的類不能加載請求的類異常異常說明說明AWTException AWT 中的異常中的異常 IOException I/O 異常的根類異常的根類 FileNotFoundException 不能找到文件不能找到文件 EOFException 文件結(jié)束文件結(jié)束 IllegalAccessException 對類的訪問被拒絕對類的訪問被拒絕 NoSuchMethodException 請求的方法不存在請求的方法不存在 InterruptedException 線程中斷線程中斷 運(yùn)行時發(fā)生的錯誤稱為異常。運(yùn)行時發(fā)生的錯誤稱為異常。 必須捕獲引發(fā)的每個異常,否則應(yīng)用程必須捕獲引發(fā)的每個異常,否則應(yīng)用程序不會正常中止。序不會正常中止。 異常處理允許在一個地方集中進(jìn)行錯誤異常處理允許在一個地方集中進(jìn)行錯誤處理。這使得可以創(chuàng)建功能強(qiáng)大且健壯處理。這使得可以創(chuàng)建功能強(qiáng)大且健壯的代碼。的代碼。 Java 使用使用 try
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)風(fēng)險(xiǎn)管理與防范制度
- 交通肇事逃逸處理制度
- 2026甘肅電投常樂發(fā)電有限責(zé)任公司招聘30人參考題庫附答案
- 2026福建省面向中國科學(xué)院大學(xué)選調(diào)生選拔工作考試備考題庫附答案
- 2026貴州遵義市湄潭縣消防救援大隊(duì)政府專職消防隊(duì)員招聘20人參考題庫附答案
- 2026重慶醫(yī)科大學(xué)附屬第一醫(yī)院工作人員招聘參考題庫附答案
- 2026青海省海西州德令哈市司法局招聘1人備考題庫附答案
- 中共玉環(huán)市委宣傳部關(guān)于下屬事業(yè)單位 市互聯(lián)網(wǎng)宣傳指導(dǎo)中心公開選聘1名工作人員的考試備考題庫附答案
- 會昌縣2025年縣直事業(yè)單位公開選調(diào)一般工作人員考試備考題庫附答案
- 德令哈市公安局2025年面向社會公開招聘警務(wù)輔助人員參考題庫附答案
- 2026年春季統(tǒng)編版三年級下冊小學(xué)語文教學(xué)計(jì)劃(含進(jìn)度表)
- 家庭醫(yī)生簽約服務(wù)工作實(shí)施方案
- 2025年全科醫(yī)生轉(zhuǎn)崗培訓(xùn)考試題庫及答案
- 外貿(mào)進(jìn)出口2025年代理報(bào)關(guān)合同協(xié)議
- 2024年安徽理工大學(xué)馬克思主義基本原理概論期末考試模擬試卷
- 2025年中考跨學(xué)科案例分析模擬卷一(含解析)
- 2025年水利工程質(zhì)量檢測員考試(金屬結(jié)構(gòu))經(jīng)典試題及答案
- 透析充分性及評估
- 2025年12月廣西區(qū)一模語文2025-2026年度首屆廣西職教高考第一次模擬考試2026年廣西高等職業(yè)教育考試模擬測試語文含逐題答案解釋99
- 安全文明施工二次策劃方案
- DB34∕T 5244-2025 消防物聯(lián)網(wǎng)系統(tǒng)技術(shù)規(guī)范
評論
0/150
提交評論