版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、例外處理(Exception Handling),在Java中,程式錯誤的處理是由所謂的例外處理機制 (Exception-handling mechanism)來負責。,Java語言實務,例外處理,2,本章重點,什麼是例外 例外的種類 如何指定例外的處理方式 列印例外物件的說明 使用throws敘述 Throwable類別階層 自定例外 類別 Java Runtime如何決定例外處理常式,Java語言實務,例外處理,3,什麼是例外,影響程式中指令敘述正常執行順序的異常狀態;例如: 進行除法運算時,分母值為零 存取陣列元素時所用的索引值超出陣列的大小 程式中欲開啟以便讀取資料的檔案尚未存在 記
2、憶體不足 硬碟無法正常運作,Java語言實務,例外處理,4,異常狀態發生時, Java Runtime會中止目前指令的執行、 產生此異常狀態的例外物件 (Exception Object) 並 決定如何進一步處理此異常狀態,Java語言實務,例外處理,5,例外的種類,Java語言實務,例外處理,6,Runtime Exception及Error由Java系統自行處理。 Checked Exception的處理強制由程式設計師於程式中指定,UrlTest.java:10: Exception .MalformedURLException must be caught , or it must b
3、e declared in the throws clause of this method. URL url = new URL(args0);,Java語言實務,例外處理,7,如何指定例外的處理方式,由下述的程式結構決定:,try / 會產生例外的程式碼 java statements; /可以有一個以的catch區塊 catch (ExceptionType1 exObject1) / 處理例外型態一的程式碼 java statements-exception handling; catch (ExceptionType2 exObject2) / 處理例外型態二的程式碼 java st
4、atements-exception handling; / finally / 例外處理結束前執行的程式碼 /本區塊可省略 java statements; ,Java語言實務,例外處理,8,程式Ex7_1除數為零程式範例,import java.io.*; class Exception1 public static void main (String args) int x, y; try y = 0; x = 44 / y; /本敘述會產生除數為零的Runtime Exception System.out.println(“Actually this line will not be
5、printed”); catch (ArithmeticException e) / catch並處理除數為零的錯誤 System.out.println(“Error-Divided by zero!”); finally /執行Finally區塊的指令 System.out.println(“The statement in the Finally Block will always be executed!”); / end of main / end of class,Java語言實務,例外處理,9,try區塊的指令會產生一個除數為零的例外 程式輸出,Error-Divide by z
6、ero! The statement in the Finally Block will always be executed!,Java語言實務,例外處理,10,列印例外物件的說明,例外物件 的getMessage() 方法會傳回有關該例外物件的文字說明:,catch (ArithmeticException e) / catch並處理除數為零的錯誤 System.out.println(“Exception: ” + e.getMessage(); ,可能結果: Exception: / by zero The statement in the Finally Block will alw
7、ays be executed!,Java語言實務,例外處理,11,使用throws敘述,throws關鍵字可以用來指定由外層的方法來來處理例外,使用throws關鍵字的一般規定: type method-name (parameter-list) throws exception-list / body of method java statements; ,Java語言實務,例外處理,12,程式Ex7_2使用throws程式範例,import .*; public class UrlTest public static void main(String args) throws Malfo
8、rmedURLException if (args.length =1) URL url = new URL(args0); System.out.println (URL: + url.toExternalForm() + n + File: + url.getFile() + n + Host: + url.getHost() + n + Port: + url.getPort() + n + Protocol: + url.getProtocol() + n + Reference: + url.getRef(); else System.out.println(Usage: UrlTe
9、st ); ,Java語言實務,例外處理,13,執行方式: java UrlTest 輸出結果: Exception in thread main .MalformedURLException: no protocol: at .URL.(Unknown Source) at .URL.(Unknown Source) at .URL.(Unknown Source) at UrlTest.main(UrlTest.java:9),Java語言實務,例外處理,14,自行控制例外的產生,使用throw敘述觸發例外 狀態 一般語法: throw ThrowableInstance; Throwab
10、leInstance物件必需是Throwable類別或其子類別的成員,Java語言實務,例外處理,15,程式Ex7_3 使用throw敘述,程式Ex7_3 使用throw敘述 import java.io.*; class ThrowDemo static void main(String args) try throw new IllegalAccessException(“demo Throw IllegalAccess Exception”); catch (IllegalAccessException e) System.out.println(“Exception caught: “
11、 + e.getMessage(); ,輸出結果: Exception caught: demo Throw IllegalAcess Exception,Java語言實務,例外處理,16,Throwable類別階層,Java語言實務,例外處理,17,自定例外 類別,撰寫自定的例外: 首先必須自行定義一個屬於Throwable類別之後代的子類別 然後利用new指令建立一個自定之例外類別的物件 最後利用throw敘述觸發例外,Java語言實務,例外處理,18,程式Ex7_4 自定例外類別 (1/4),import java.io.*; / 自定例外類別 class InvalidTransfer
12、Exception extends Exception InvalidTransferException(String emsg) super(emsg); / invoke the constructor of the parent class / end of class,Java語言實務,例外處理,19,/ 轉帳處理類別 class ExceptionDemo static int balance;/ 存放餘額的變數 ExceptionDemo(int b) / 建構子 balance = b; void transfer(int amount)throws InvalidTransfe
13、rException if (amount balance) / 當轉帳金額大於餘額時就產生例外 throw new InvalidTransferException(Transfer Amount greater than balance!); else balance = balance - amount; / 否則將餘額更新成扣除轉帳金額後之值 / end of method transfer / end of class ExceptionDemo,程式Ex7_4 自定例外類別 (2/4),Java語言實務,例外處理,20,程式Ex7_4 自定例外類別 (3/4),/ 測試自定例外類別
14、的使用 public class MyExceptionDemo public static void main (String args) / 產生一個處理轉帳的類別並將餘額初值設為1500 ExceptionDemo edemo = new ExceptionDemo(1500); System.out.println(Balance before transfer: + edemo.balance); try edemo.transfer(2000); /進行轉帳2000元的交易 System.out.println(Current Balance: + ExceptionDemo.ba
15、lance); catch (InvalidTransferException e) System.out.println(Exception caught: + e.getMessage(); / end of method main / end of class MyExceptionDemo,Java語言實務,例外處理,21,執行結果: Balance before transfer:1500 Exception caught: Transfer Amount greater than balance!,程式Ex7_4 自定例外類別 (4/4),Java語言實務,例外處理,22,Java
16、 Runtime如何決定例外處理常式,基本原則 由內而外 由上而下 順序優先,Java語言實務,例外處理,23,由內而外 當有巢狀式的try區塊時,Java Runtime會先從與最內層的try區塊所對應的catch區塊去尋找適當的例外處理常式,若沒有才去尋找外層的catch區塊,,try / 程式區塊一 try / 程式區塊二 try / 程式區塊三 java statements; catch() /exception handler 3 catch() /exception handler 2 catch() /exception handler 1,Java語言實務,例外處理,24,由
17、上而下 當方法a呼叫方法b而方法b又呼叫方法c時,若於方法c的執行過程中產生了例外,則Java Runtime會依呼叫堆疊(Call Stack) 中各方法出現的順序依序從上而下尋找處理常式,method_a / 在method_a的try區塊內呼叫 method_b try catch (Exception e) /method_c, method_b及method_a所產生的例外都會在此區塊處理 method_b throws Exception / method_b 呼叫method_c method_c throws Exception /method_c可能會產生例外 ,Java語言實務,例外處理,25,順序優先 當一個try區塊對應有一個以上的catch區塊時,Java Runtime會按照各catch區塊在程式中出現的順序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 温州2025年浙江温州台湾青年创业就业服务中心招聘编外人员笔试历年参考题库附带答案详解
- 济宁2025年山东济宁汶上县中都技工学校教师招聘11人笔试历年参考题库附带答案详解
- 无锡2025年江苏无锡市文艺院团传习中心招聘事业编制专业人才8人笔试历年参考题库附带答案详解
- 德阳2025年四川德阳广汉市教育和体育局下属单位市外选调教师7人笔试历年参考题库附带答案详解
- 平顶山2025年河南平顶山市新华区事业单位招聘60人笔试历年参考题库附带答案详解
- 安庆2025年安徽安庆桐城市卫生健康党建服务中心选调工作人员5人笔试历年参考题库附带答案详解
- 嘉兴2025年浙江嘉兴桐乡市教育系统下属幼儿园招聘30人笔试历年参考题库附带答案详解
- 职业人群慢病的健康 workplace 推进策略
- 六安2025年安徽六安技师学院招聘高技能人才4人笔试历年参考题库附带答案详解
- 职业人群健康管理的个性化策略
- 公司cqc标志管理办法
- 2025年日本市场数字广告投放洞察报告-Sensor Tower
- 绳索救援系统教学课件
- 统编版语文六年级下册小升初课内阅读专项训练-(含答案)
- 保险公司数据安全管理制度及流程
- 2024版科普仁爱版七年级英语下册单词表
- 生物-浙江省宁波市2024学年高一第一学期期末统一测试试题和答案
- 律师事务所整改措施
- 新能源光伏发电系统设计与安装手册
- JTS 206-2-2023 水运工程桩基施工规范
- DB4403-T 427-2024 叉车运行监测系统技术规范
评论
0/150
提交评论