版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、單元11 異常處理除法計算器程序設計單元目標u 理解異常的概念和用途;u 掌握使用try-catch-finally語句結構;u 理解finally語句的用法;學習任務1.任務描述編寫一個除法計算器,程序要求在出現除數為零和除數、被除數中有一個不是數字的情況時進行相應的處理。當調用存放在數組中的計算結果,數組有可能產生索引越界,對這種情況進行捕捉和處理。2.運行結果 請輸入除數:0請輸入被除數:10異常2:除數不能為零!最后要執(zhí)行的內容5! 除法計算器程序設計知識準備11.1 異常概念以及處理機制在生活中,發(fā)生異常我們懂得如何處理,那么在JAVA程序中,又是如何處理異常的呢?異常處理就像我們平
2、時可能會遇到的意外情況,預想好了一些處理的辦法。也即是說,在程序執(zhí)行代碼的時候,萬一發(fā)生了異常,程序會按照預定的處理方法對異常進行異常處理,異常處理完畢之后,程序繼續(xù)運行。但異常處理的機制需要落實到具體的處理代碼上 ,Java的異常處理方式有兩種:“捕捉異?!钡漠惓L幚矸绞綄κ軝z異常、運行時異常均適用,捕捉異常處理語句是trycatch;“上報異?!笔钱斍暗拇a不能處理產生的異常,將異常交給調用它的上級進行處理的異常處理的方法。11.2異常的分類Java異常分為系統(tǒng)異常和自定義異常。11.2.1 系統(tǒng)異常在Java的系統(tǒng)異常中,throwable是它們的父類,其子類有Error和Excepti
3、on。前者表示程序運行時發(fā)生較少內部的異常,程序員無法處理。后者是程序運行和環(huán)境產生的異常,可以捕獲和處理。在開發(fā)中遇到的異常絕大部分是Exception異常。圖3-4 系統(tǒng)異常的分類JAVA中幾個常見的異常如下: 1) ArithmeticException 當出現異常算術條件時產生;2) NullPointerException 當應用程序企圖使用需要的對象處為空時產生;3) ArrayIndexOutOfBoundsException 數組下標越界時產生;4) ArrayStoreException 當程序試圖存儲數組中錯誤的類型數據時產生;5) FileNotFoundExceptio
4、n 試圖訪問的文件不存在時產生;6) IOException 由于一般I/O故障而引起的,如讀文件故障;7) NumberFormatException 當把字符串轉換為數值型數據失敗時產生;8) OutOfMemoryException 內存不足時產生;9) StackOverflowException 當系統(tǒng)的堆??臻g用完時產生;11.2.2 用戶自定義異常JAVA內置的異常能夠處理大多數常見的運行時錯誤,但也可以自己定義,自定義異常來處理系統(tǒng)異常無法捕獲的異常。11.3 異常的捕獲與處理捕獲處理方式主要是使用try.catch,將可能出現的錯誤用try語句包繞,當try中的語句出現異常時
5、,就停止當前程序的執(zhí)行,轉入到catch中執(zhí)行語句處理異常。也就是說try語句用來發(fā)現異常,而catch語句用來處理異常。11.3.1 try.catch語句異常處理語句的結構格式如下:try 程序代碼 catch(異常類型1 異常的變量名1) 程序代碼 catch(異常類型2 異常的變量名2) 程序代碼 finally 程序代碼 注:catch語句的參數包括一個異常類型和一個異常對象,異常對象必須為Throwable的子類,指明了catch語句可以處理的異常類型。catch語句可以有多個,分別處理不同類型的異常。一個catch語句也可以捕捉多個異常類型,此時,catch的異常類型參數應該是這
6、些異常類型的父類?!緦嵗?-9】 輸入一個整數并計算該整數是奇數還是偶數?!驹创a】除法計算器程序設計import java.util.Scanner;public class InputException public static void main(String args) int input = 0;Scanner s = new Scanner(System.in);System.out.println("請輸入一個整數:");try input = s.nextInt();if (input % 2 = 0) System.out.println("輸
7、入整數為偶數!"); else System.out.println("輸入整數為奇數!"); catch (InputMismatchException e) System.out.println("輸入類型不正確!"); 該程序產生的輸出如下:請輸入一個整數:4輸入整數為偶數!11.3.2多個catch語句當某個程序塊可能出現錯個異常時,可以用多個catch語句,每個catch語句捕獲一種異常,捕獲異常的順序和catch語句的順序有關,當捕獲到一個異常時,剩下的catch語句就不再進行匹配?!緦嵗?-10】從鍵盤輸入一個double類型的數
8、字。如果給出的不是double類型的會產生異常?!驹创a】除法計算器程序設計import java.util.Scanner;public class StringToDouble public static void main(String args) Scanner in = new Scanner(System.in);try String str = in.nextLine();double doub = Double.parseDouble(str); catch (NumberFormatException ne) System.out.println("異常1:&quo
9、t;);ne.printStackTrace(); catch (Exception e) System.out.println("異常2:");e.printStackTrace(); finally System.out.println("異常處理完備");該程序產生的輸出如下:56.o異常1:異常處理完備【經驗】 在安排catch語句的順序時,首先應該捕獲最特殊的異常,然后再逐漸一般化。也就是一般先安排子類,再安排父類。 11.3.3 finally語句前面介紹過,不管try和catch語句時候會出現異常,finally語句都會執(zhí)行。finally
10、語句是為異常處理事件提供的一個清理機制,一般是用來關閉文件或釋放其他系統(tǒng)資源。作為try-catch-finally結構的一部分,可以沒有finally語句,如果存在finally語句,不論try塊中是否發(fā)生異常,是否執(zhí)行過catch語句,都執(zhí)行finally語句。【實例3-11】從鍵盤接收一個整數數字,不論發(fā)生異常與否,都會執(zhí)行finally語句?!驹创a】除法計算器程序設計import java.util.Scanner;public class FinallyDemo public static void main(String args) try System.out.print(&q
11、uot;輸入一個正整數:");Scanner s = new Scanner(System.in);int data = s.nextInt(); catch (Exception e) System.out.println(e); finally System.out.print("finally 語句塊!");該程序產生的輸出如下:輸入一個正整數:ujava.util.InputMismatchExceptionfinally 語句塊!任務實施1實現思路輸入兩個數以及兩個數相除。但在程序運行時,會產生很多意想不到的輸入問題,如輸入數中出現了字母、特殊符號等,程
12、序無法正確運行下去。本任務采用異常捕獲和處理技術保證程序的健壯性。l 打開Eclipse,創(chuàng)建一個類l 在類main方法中輸入兩個數相除l 給輸入的兩個數以及兩個數相除會產生異常,對這段代碼進行異常處理除法計算器程序設計l 編寫測試類,運行程序2.程序代碼import java.util.InputMismatchException;import java.util.Scanner;public class Divider public static void main(String args) int result = 0, 1, 2 ;int oper1 = 0;int oper2 = 0
13、;Scanner in = new Scanner(System.in);try System.out.print("請輸入除數:");oper1 = in.nextInt();System.out.print("請輸入被除數:");oper2 = in.nextInt();result2 = oper2 / oper1;System.out.println("計算結果:" + result3); catch (InputMismatchException e1) System.out.println("異常1:輸入不為數字
14、!"); catch (ArithmeticException e2) System.out.println("異常2:除數不能為零!"); catch (ArrayIndexOutOfBoundsException e3) System.out.println("異常3:數組索引越界!"); catch (Exception e4) System.out.println("其他異常4:" + e4.getMessage(); finally System.out.println("最后要執(zhí)行的內容5!"
15、);任務拓展 在使用try-catch-finally處理異常時也會通過Exception對象追蹤錯誤信息,下面是幾個常用的方法:1. printStackTrace() :其追蹤輸出至標準錯誤流?!緦嵗?-12】輸入課程代號1到數字3,得到代號對應的課程?!驹创a】除法計算器程序設計import java.util.Scanner;public class TestException1 public static void main(String args) System.out.print("請輸入課程代號(13之間的數字):");Scanner in = new Sc
16、anner(System.in);try int courseCode = in.nextInt(); catch (Exception ex) System.out.println("輸入不為數字!");ex.printStackTrace(); finally System.out.println("歡迎提出建議!");該程序產生的輸出如下:請輸入課程代號(13之間的數字):l輸入不為數字!歡迎提出建議!java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Unknown Sour
17、ce)at java.util.Scanner.next(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at TestException1.main(TestException1.java:7)2. getStackTrace():返回堆棧跟蹤元素的數組,每個元素表示一個堆棧幀。數組的第零個元素(假定數據的長度為非零)表示堆棧頂部,它是序列中最后的方法調用。該方法會打出詳細異常,異常名稱,出錯位置,便于調試。3getMessage() 返回此該異常的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 麻雀主題課程設計意圖
- 連接板沖壓課程設計
- 算法與計算方法課程設計
- 2024年學校安全工作應急預案
- 2024年一年級語文上全冊各單元測試題分解
- 年度其它新型計算機外圍設備戰(zhàn)略市場規(guī)劃報告
- 年度碳纖維預浸布市場分析及競爭策略分析報告
- 2025年度專業(yè)打印紙銷售渠道建設合同4篇
- 2025年度新能源項目出借咨詢及項目管理協議4篇
- 2025年新型門窗安裝工程承包合同4篇
- 第21課《鄒忌諷齊王納諫》對比閱讀 部編版語文九年級下冊
- 2024年安全員-C證考試題庫及答案(1000題)
- 餐廚垃圾收運安全操作規(guī)范
- 皮膚內科過敏反應病例分析
- 電影《獅子王》的視聽語言解析
- 妊娠合并低鉀血癥護理查房
- 煤礦反三違培訓課件
- 2024年中國航空發(fā)動機集團招聘筆試參考題庫含答案解析
- 當代中外公司治理典型案例剖析(中科院研究生課件)
- 動力管道設計手冊-第2版
- 2022年重慶市中考物理試卷A卷(附答案)
評論
0/150
提交評論