Java應用開發(fā)與實踐-第6章異常處理_第1頁
Java應用開發(fā)與實踐-第6章異常處理_第2頁
Java應用開發(fā)與實踐-第6章異常處理_第3頁
Java應用開發(fā)與實踐-第6章異常處理_第4頁
Java應用開發(fā)與實踐-第6章異常處理_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java應用開發(fā)與實踐第第二二部分部分 酒店管理系統(tǒng)的設計酒店管理系統(tǒng)的設計學習目標了解異常的概念和分類理解編譯異常和運行時異常掌握常見的異常處理方式了解自定義異常n 6.1 異常的概述異常的概述n 6.2 異常處理異常處理n 6.3 自定義異常自定義異常n 6.4 實訓實訓6 異常處理的基礎練習異常處理的基礎練習目錄目錄6.1 6.1 異常的概述l在Java程序設計語言中,使用一種異常處理的錯誤捕獲機制。l當程序運行過程中發(fā)生一些異常情況,程序有可能被中斷、或?qū)е洛e誤的結(jié)果出現(xiàn)。比如,想打開的文件不存在、網(wǎng)絡連接中斷、接受了不符合邏輯的操作數(shù)、系統(tǒng)資源不足等等。在這些情況下,程序不會返回任何

2、值,而是拋出封裝了錯誤信息的對象。Java語言提供了專門的異常處理機制去處理這些異常。l針對異常情況的處理是非常重要的。6.1.1 6.1.1 異常的概念和分類6.1 6.1 異常的概述lJava語言規(guī)范將派生于Error類或RuntimeException類的所有異常都稱為非檢查異常。l除非檢查異常以外的所有異常都稱為檢查異常。l檢查異常對方法調(diào)用者來說屬于必須處理的異常,當一個應用系統(tǒng)定義了大量或者容易產(chǎn)生很多檢查異常的方法調(diào)用,程序中會有很多的異常處理代碼。6.1.1 6.1.1 異常的概念和分類Java異常體系結(jié)構(gòu)6.1 6.1 異常的概述l異常類分兩大類型:Error類代表了編譯和系

3、統(tǒng)的錯誤,不允許捕獲,在大多數(shù)情況下,當遇到這樣的錯誤時,建議讓程序中斷,應用程序一般不對此問題進行處理;lException類代表了標準Java庫方法所激發(fā)的異常。處理它們,然后繼續(xù)程序執(zhí)行。l錯誤情況不會介入到程序的正常流程中。所以一般討論Exception類這類異常。lException類包含編譯異常(非運行時異常類)checkedExceptions和運行時異常類RuntimeException這兩個直接的子類。6.1.1 6.1.1 異常的概念和分類6.1 6.1 異常的概述l編譯異常又叫非運行時異常,是RuntimeException以外的異常,類型上都屬于Exception類及其

4、子類。lJava編譯器利用分析方法或構(gòu)造方法中可能產(chǎn)生的結(jié)果來檢測Java程序中是否含有檢測異常的處理程序,對于每個可能的可檢測異常,方法或構(gòu)造方法的throws子句必須列出該異常對應的類。l在Java的標準包java.lang java.util 和 中定義的異常都是非運行異常。從程序語法角度講是必須進行處理的異常,如果不處理,程序就不能編譯通過。6.1.2 6.1.2 編譯異常6.1 6.1 異常的概述l運行時異常類對應于編譯錯誤,它是指Java程序在運行時產(chǎn)生的由解釋器引發(fā)的各種異常,都是RuntimeException類及其子類異常。l運行時異常可能出現(xiàn)在任何地方,且出現(xiàn)頻率很高,因此

5、為了避免巨大的系統(tǒng)資源開銷,編譯器不對異常進行檢查。所以Java語言中的運行時異常不一定被捕獲。l出現(xiàn)運行錯誤往往表示代碼有錯誤,如:算數(shù)異常(如被0除)、下標異常(如數(shù)組越界)等。一般比較常見的運行異常有:NullPointerException(空指針異常)、 IndexOutOfBoundsException(下標越界異常)、ClassCastException(類轉(zhuǎn)換異常) 、ArrayStoreException(數(shù)據(jù)存儲異常,操作數(shù)組時類型不一致)等等。6.1.3 6.1.3 運行時異常6.1 6.1 異常的概述lError類和Exception類都是類Throwable的子類,在

6、Java 編程語言中,錯誤類(Error)定義被認為是不能恢復的嚴重錯誤條件(如資源耗盡等和虛擬機相關(guān)的問題)。l在大多數(shù)情況下,當遇到這樣的錯誤時,建議讓程序中斷,應用程序一般不對此問題進行處理。6.1.4 6.1.4 錯誤6.2 6.2 異常處理l一旦產(chǎn)生異常,產(chǎn)生異常的語句以及以后的語句將不再執(zhí)行,而后自動結(jié)束程序的執(zhí)行。l最常見的異常捕捉方式就是 trycatch方式,利用try程序塊放置可能出現(xiàn)異常的代碼,利用catch塊來捕獲異常,打印出詳細的信息,通常使用printStackTrace()方法來顯示是什么原因?qū)е碌漠惓2⑶夷軌蜃龀鱿鄳奶幚怼如果出現(xiàn)出現(xiàn)異常,則程序至catch

7、處執(zhí)行輸出,進行異常捕獲處理。程序中即使有了異常,程序也可以正常的執(zhí)行完畢,為了讓錯誤的信息更加的完整,一般都會調(diào)用printStackTrace()方法進行異常信息的打印。6.2.1 6.2.1 捕獲異常6.2 6.2 異常處理 System.out.println(除法計算開始); try int result = 5 / 0; System.out.println(除法計算結(jié)果: + result); catch (ArithmeticException e) e.printStackTrace(); System.out.println(除法計算結(jié)束);6.2.1 6.2.1 捕獲異常

8、可以使用try/catch/finally語句處理異常,就是在try/catch的語句塊中加入finally語句塊作為統(tǒng)一的出口操作(不管是否有異常、是否處理了異常,finally語句都會執(zhí)行)。System.out.println(除法計算開始); try int result = 5 / 1; System.out.println(除法計算結(jié)果: + result); catch (ArithmeticException e) e.printStackTrace(); finally System.out.println(不管是否出現(xiàn)異常都執(zhí)行); System.out.println(除

9、法計算結(jié)束);6.2.1 6.2.1 捕獲異常6.2 6.2 異常處理l拋出異常是處理異常的另一種方式。通常,為了明確指出一個方法不捕獲某類異常,而讓調(diào)用該方法的其他方法捕獲該異常,可以在定義方法的時候,使用throws關(guān)鍵字,用以拋出該類異常。lthrows關(guān)鍵字作用于方法的聲明上,表示一個方法不處理異常,而交由調(diào)用處進行處理。lthrows關(guān)鍵字不僅可以在普通方法上使用,main方法上也可以使用。即main方法不對異常進行處理,而向它的上級拋出,即由JVM進行處理。6.2.2 6.2.2 拋出異常class Calculationpublic int division(int n1, in

10、t n2) throws Exception return n1/n2;6.2.2 6.2.2 拋出異常System.out.println(除法計算開始);int result = 2147483647;try result = new Calculation().division(5,0); catch (Exception e) e.printStackTrace();if(result=2147483647)System.out.println(除法計算結(jié)果無效);elseSystem.out.println(除法計算結(jié)果:+result);System.out.println(除法計

11、算結(jié)束);6.2.2 6.2.2 拋出異常6.3 6.3 自定義異常l如果 Java 提供的內(nèi)置異常類型不能滿足程序設計的需求,可以設計自己的異常類型。自定義異常類必須繼承現(xiàn)有的 Exception 類或 Exception 的子類來創(chuàng)建。l自定義異常語法形式為: l在編碼規(guī)范上,一般將自定義異常類的類名命名為 XXXException,其中 XXX 用來代表該異常的作用。l自定義異常類一般包含兩個構(gòu)造方法:一個是無參的默認構(gòu)造方法,另一個構(gòu)造方法以字符串的形式接收一個定制的異常消息,并將該消息傳遞給超類的構(gòu)造方法。6.3 6.3 自定義異常class NegativeNumberExcept

12、ion extends Exception private int value;public NegativeNumberException() super();public NegativeNumberException(String msg, int value) super(msg);this.value = value;public int getValue() return value;6.3 6.3 自定義異常class Calculation int division(int n1, int n2) throws NegativeNumberException if (n2 0)

13、 / 手動通過throw關(guān)鍵字拋出一個自定義異常對象throw new NegativeNumberException(除數(shù)是負數(shù)的異常, n2);return n1 / n2;6.3 6.3 自定義異常public class Demo6_7 public static void main(String args) Calculation cal = new Calculation();try int x = cal.division(5, -1);System.out.println(除法的商是: + x); catch (NegativeNumberException e) System

14、.out.println(e.toString();System.out.println(出錯的除數(shù)是: + e.getValue();System.out.println(除法計算結(jié)束);6.4 6.4 實訓6 6 異常處理基礎練習要求:將已知一個數(shù)的平方根輸出。如果該數(shù)小于0或不是數(shù)字,則進行異常處理。任務1 1:利用try/catchtry/catch和throwsthrows處理小于0 0或不是數(shù)字的情況6.4 6.4 實訓6 6 異常處理基礎練習要求:測試輸入的年齡的合格情況,如果年齡超過35歲,則進行異常處理。任務2 2:利用try/catchtry/catch和throwsthrows處理年齡不能

溫馨提示

  • 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

提交評論