




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第8章 Java異常處理,本章要點(diǎn),Java異常的概念 Java異常的處理機(jī)制 異常的捕獲、處理和拋出 用戶(hù)自定義異常,8.1 異常的概念及分類(lèi),8.1.1 什么是異常 8.1.2 Java異常分類(lèi),8.1.1 什么是異常?,Java把錯(cuò)誤分為兩類(lèi): 一類(lèi)是非致命性的,通過(guò)某種修正后程序還能繼續(xù)執(zhí)行,這類(lèi)錯(cuò)誤稱(chēng)作異常: 負(fù)數(shù)開(kāi)平方 讀取不存在的文件,另一類(lèi)是致命性的,即程序遇到了嚴(yán)重的不正常狀態(tài),不能簡(jiǎn)單地恢復(fù)執(zhí)行,這就是錯(cuò)誤: JVM內(nèi)部錯(cuò)誤 操作系統(tǒng)錯(cuò)誤 內(nèi)存溢出,二、異常的產(chǎn)生及處理過(guò)程,Java提供了異常處理機(jī)制,在Exception類(lèi)中定義了程序產(chǎn)生異常的條件; 對(duì)待異常通常并不結(jié)束
2、程序,而是轉(zhuǎn)去執(zhí)行某段代碼處理這個(gè)異常,設(shè)法恢復(fù)程序繼續(xù)執(zhí)行;,當(dāng)程序中發(fā)生異常時(shí),稱(chēng)程序產(chǎn)生了一個(gè)異常事件,相應(yīng)地生成異常對(duì)象; 生成的異常對(duì)象傳遞給Java運(yùn)行時(shí)系統(tǒng);,異常產(chǎn)生和提交的過(guò)程稱(chēng)為拋出異常; 異常發(fā)生時(shí),Java運(yùn)行時(shí)系統(tǒng)從生成對(duì)象的代碼塊開(kāi)始,沿方法的調(diào)用棧逐層回溯,尋找相應(yīng)的處理代碼,并把異常對(duì)象交給該方法處理,這一過(guò)程稱(chēng)為捕獲異常。,excp1,ArithmeticException,int x;,x=x/0,0 x6b46, x=x/0 , ,異常對(duì)象,0 x6b92,0 x6b46,0 x6b46,0 x6b92, ,異常處理類(lèi),拋 出 異 常,捕 獲 異 常,Ja
3、va類(lèi)庫(kù)所有的包中都定義了異常類(lèi)和錯(cuò)誤類(lèi); Exception 類(lèi)是所有異常的父類(lèi); Error 類(lèi)是所有錯(cuò)誤的父類(lèi),這兩個(gè)類(lèi)同時(shí)又是 Throwable 的子類(lèi)。,異常和錯(cuò)誤類(lèi)的層次結(jié)構(gòu),示例8-1,public class Test public static void main(String args) String friends = lisa,bily,kessy; for(int i=0;i5;i+) System.out.println(friendsi); System.out.println(nthis is the end); ,C:JavaExamjavac Test.j
4、ava C:JavaExamjava Test lisa bily kessy Exception in thread main java.lang.ArrayIndexOutOfBoundsException at Test.main(Test.java:5),自動(dòng)顯示異常信息; 指明異常的種類(lèi):RuntimeException 出錯(cuò)的位置;,8.2 Java異常處理機(jī)制,8.2.1 捕獲異常 8.2.2 聲明拋棄異常 8.2.3 人工拋出異常,8.2.1 捕獲異常,對(duì)所發(fā)生的異常進(jìn)行的處理就是異常處理; 異常處理的重要性在于,程序不但能發(fā)現(xiàn)異常,還要捕獲異常。,使用 try 語(yǔ)句括住可能拋
5、出異常的代碼段; 用 catch 語(yǔ)句指明要捕獲的異常及相應(yīng)的處理代碼。,try / 此處為拋出具體異常的代碼 catch(ExceptionType1 e) / 拋出ExceptionType1異常時(shí)要執(zhí)行的代碼 catch(ExceptionType2 e) / 拋出ExceptionType2異常時(shí)要執(zhí)行的代碼 catch(ExceptionTypek e) / 拋出ExceptionTypek異常時(shí)要執(zhí)行的代碼 finally / 必須執(zhí)行的代碼 ,其中,ExceptionType1,ExceptionType2,.,ExceptionTypek是產(chǎn)生的異常類(lèi)型。 根據(jù)發(fā)生異常所屬的類(lèi)
6、,找到對(duì)應(yīng)的catch語(yǔ)句,然后執(zhí)行其后的語(yǔ)句序列。 不論是否捕獲到異常,總要執(zhí)行finally后面的語(yǔ)句。,public String getMessage( ) 用來(lái)得到有關(guān)異常事件的信息 public void printStatckTrace( ) 用來(lái)跟蹤異常事件發(fā)生時(shí)執(zhí)行堆棧的內(nèi)容,public class Test public static void main(String args) String friends =lisa,bily,kessy; try for(int i=0;i5;i+) System.out.println(friendsi); catch(java.
7、lang.ArrayIndexOutOfBoundsException e) System.out.println(index err); System.out.println(nthis is the end); ,public class Test public static void main(String args) String friends =lisa,bily,kessy; for(int i=0;i5;i+) System.out.println(friendsi); ,運(yùn)行結(jié)果,C:JavaExamjavac Test.java C:JavaExamjava Test li
8、sa bily kessy Exception in thread main java.lang.ArrayIndexOutOfBoundsException at Test.main(Test.java:5),Java程序處理異常的原則,對(duì)于Error和RuntimeException,可以在程序中捕獲,但不是必須; 對(duì)于IOException及其違例,必須在程序中進(jìn)行捕獲和處理。,import java.io.*; public class TestIOException public static void main(String args) FileInputStream in=new
9、 FileInputStream(me.txt); int b; b = in.read(); while(b!= -1) System.out.print(char)b); b = in.read(); in.close(); ,try FileInputStream in=new FileInputStream(me.txt); int b; b = in.read(); while(b != -1) System.out.print(char)b); b = in.read(); in.close(); ,catch(IOException e) System.out.println(e
10、); finally System.out.println(Its ok!); ,運(yùn)行結(jié)果,C:JavaExamjava TestIOException java.io.FileNotFoundException: me.txt (系統(tǒng)找不到指定的文件。) Its ok! C:JavaExamjava TestIOException lesson 17 long long age,there lived a king!Its ok!,總結(jié),try / 此處為拋出具體異常的代碼 catch(ExceptionType1 e) / 拋出ExceptionType1時(shí)要執(zhí)行代碼 ,8.2.2 聲明拋
11、棄異常,如果一個(gè)方法可能產(chǎn)生某種異常,但該方法并不對(duì)這個(gè)異常進(jìn)行處理,而由方法的調(diào)用者負(fù)責(zé)處理這個(gè)異常,則該方法應(yīng)被聲明拋棄這種異常; methodName(arguList) throws ,public void readFile( ) throws IOException FileInputStream in; in = new FileInputStream(myfile.txt); int b = in.read(); while(b!= -1) System.out.print(char)b); b = in.read( ); in.close( ); ,public class
12、Test public static void main(String args) Test t = new Test( ); try t.readFile(); catch(IOException e) System.out.println(e); System.out.println(退出!); ,運(yùn)行結(jié)果,8.2.3 人工拋出異常,人工創(chuàng)建異常對(duì)象 通過(guò) throw 將其拋出(Java運(yùn)行環(huán)境) IOException e = new IOException( ); throw e; 注意: 拋出的異常對(duì)象必須是Throwable或其子類(lèi)的實(shí)例,8.3 用戶(hù)自定義異常,自定義異常類(lèi)必須繼
13、承Throwable類(lèi)或其子類(lèi); 自定義異常類(lèi)的對(duì)象永遠(yuǎn)不會(huì)自動(dòng)拋出,只能人工創(chuàng)建并拋出。,class MyException extends Exception private int idnumber; public MyException(String message,int id) super(message); this.idnumber=id; public int getId( ) return idnumber; ,public class Test public void regist(int num) throws MyException if(num 0) throw n
14、ew MyException(人數(shù)為負(fù)值,不合理,3); System.out.println(登記人數(shù)+num); ,public MyException(String message,int id) super(message); this.idnumber=id; ,public void manager( ) try regist(-100); catch(MyException e) System.out.println(登記出錯(cuò),類(lèi)別:+e.getId(); System.out.println(本次登記操作結(jié)束); ,登記出錯(cuò),類(lèi)別:3 本次登記操作結(jié)束,public stati
15、c void main(String args ) Test t=new Test( ); t.manager( ); ,1. 下列描述中,正確的是,try代碼段和其后跟隨的catch代碼段之間可以有間隔的代碼; finally代碼段中不可以有try和catch代碼段; finally代碼段在異常出現(xiàn)的情況下不被執(zhí)行; 每個(gè)catch代碼段聲明其能處理的一種特定類(lèi)型的異常。,2. 在橫線處填上正確的語(yǔ)句,if( t = null ) throw new ;,NullPointerException( ),第9章 Java控制臺(tái)應(yīng)用程序設(shè)計(jì),本章要點(diǎn),Java命令行參數(shù)和系統(tǒng)屬性 標(biāo)準(zhǔn)I/O,文
16、件I/O,9.1 Java命令行參數(shù),9.1.1 Java命令行參數(shù) 9.1.2 系統(tǒng)屬性,9.1.1 Java命令行參數(shù),java 命令行參數(shù)String數(shù)組 main( ) args接收; 命令行參數(shù)以空格或雙撇號(hào)作為分隔符,public class Test public static void main(String args) for ( int i = 0; iargs.length; i+ ) System.out.println(args + i + = + argsi); ,java Test lisa bily Mr Brown,args0 = Lisa args1 = b
17、ily args2 = Mr Brown,9.1.2 系統(tǒng)屬性,在Java中,系統(tǒng)屬性起到替代環(huán)境變量的作用; 系統(tǒng)屬性可以將運(yùn)行時(shí)Java程序的相關(guān)信息參數(shù)化機(jī)制 系統(tǒng)屬性: 屬性名+屬性值+映射關(guān)系,Enumeration接口,public interface Enumeration / 判斷基礎(chǔ)容器是否有下一元素 public boolean hasMoreElements( ); / 返回基礎(chǔ)容器的下一元素 public Object nextElement( ); ,import java.util.Properties; import java.util.Enumeration;
18、Properties ps = System.getProperties( ); Enumeration pn = pertyNames( );,創(chuàng)建一個(gè)Properties的對(duì)象ps,包含了所有的系統(tǒng)屬性,返回Enumeration類(lèi)型表示的所有系統(tǒng)屬性名,while ( pn.hasMoreElements() ) String pName = (String) pn.nextElement(); String pValue = ps.getProperty(pName); System.out.println(pName + - + pValue); ,判斷Enumerati
19、on類(lèi)型對(duì)象中是否有下一元素,返回下一元素的值,運(yùn)行結(jié)果,9.2 數(shù)據(jù)輸入/輸出,9.2.1 標(biāo)準(zhǔn)I/O操作 9.2.2 文件I/O操作,9.2.1 標(biāo)準(zhǔn)I/O操作,用戶(hù)與程序的交互方式: 用戶(hù)鍵盤(pán)標(biāo)準(zhǔn)輸入設(shè)備輸入數(shù)據(jù) 程序終端端口標(biāo)準(zhǔn)輸出設(shè)備輸出數(shù)據(jù) 控制臺(tái)應(yīng)用程序 輸入/輸出標(biāo)準(zhǔn) I/O 或控制臺(tái) I/O,java.lang.System類(lèi),System.out 向標(biāo)準(zhǔn)輸出寫(xiě)出數(shù)據(jù) Syste.in 從標(biāo)準(zhǔn)輸入讀入數(shù)據(jù) System.err 錯(cuò)誤信息的輸出,InputStreamReader isr = new InputStreamReader(System.in); BufferedR
20、eader br = new BufferedReader(isr);,用于從字符輸入流中讀取文本; 創(chuàng)建一個(gè)BufferedReader對(duì)象從鍵盤(pán)逐行讀入數(shù)據(jù),1. InputStreamReader類(lèi)可以將讀取的字節(jié)數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù); 2. 創(chuàng)建一個(gè)用于接收從鍵盤(pán)輸入的字符數(shù)據(jù)的對(duì)象,總結(jié),在這里,程序?qū)?biāo)準(zhǔn)輸入流(System.in)串接到一個(gè)InputStreamReader上,而后又將其串接到一個(gè)BufferedReader上,把鍵盤(pán)輸入的內(nèi)容經(jīng)過(guò)處理顯示在屏幕上。,try / 每讀入一行后向顯示器輸出 s = br.readLine(); while( !s.equals() S
21、ystem.out.println(Read: + s); s = br.readLine(); br.close(); / 關(guān)閉輸入流 catch (IOException e) / 捕獲可能的異常 e.printStackTrace();,運(yùn)行結(jié)果,9.2.2 文件I/O操作,在對(duì)一個(gè)文件進(jìn)行I/O操作之前,必須先獲得有關(guān)這個(gè)文件的基本信息,例如文件能不能被讀取,能不能被寫(xiě)入,絕對(duì)路徑是什么,文件長(zhǎng)度是多少,等等。 類(lèi)java.io.File提供了獲得文件基本信息及操作文件的一些工具。,創(chuàng)建一個(gè)新File對(duì)象,可使用以下構(gòu)造方法: File myFile;myFile=new File(T
22、est.java); 或 myFile=new File(E:ex, Test.java ); File myDir=new File(E:exTest.java);File path=new Fle(E:ex); File path=new Fle (path,Test.java );,使用何種構(gòu)造方法經(jīng)常要由其他被訪問(wèn)的文件對(duì)象來(lái)決定。 例如,當(dāng)在應(yīng)用程序中只用到一個(gè)文件時(shí),那么使用第一種構(gòu)造方法最為實(shí)用;但如果使用了一個(gè)共同目錄下的幾個(gè)文件,則使用第二或第三種構(gòu)造方法會(huì)更方便。 創(chuàng)建File類(lèi)的對(duì)象后,可以應(yīng)用其中的文件測(cè)定相關(guān)方法來(lái)獲取文件的信息。,與文件名相關(guān)的方法,String g
23、etName( ):獲取文件名; String getPath( ):獲取文件路徑; String getAbsolutePath( ):獲取文件絕對(duì)路徑; String getParent( ):獲取文件父目錄名稱(chēng); boolean renameTo(File newName):更改文件名,成功則返回true,否則返回false。,文件測(cè)定方法,boolean exists():文件對(duì)象是否存在 boolean canWrite():文件對(duì)象是否可寫(xiě) boolean canRead():文件對(duì)象是否可讀 boolean isFile():文件對(duì)象是否是文件 boolean isDirectory():文件對(duì)象是否是目錄 boolean isAbsolute(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)員制翡翠首飾服務(wù)創(chuàng)新創(chuàng)業(yè)項(xiàng)目商業(yè)計(jì)劃書(shū)
- 新型彈性體行業(yè)跨境出海項(xiàng)目商業(yè)計(jì)劃書(shū)
- 社工法律培訓(xùn)實(shí)務(wù)要點(diǎn)
- 高鐵建設(shè)監(jiān)理旁站計(jì)劃藍(lán)本
- 微波無(wú)線功率傳輸陣列天線子陣劃分方法研究
- 部編道德與法治六年級(jí)上冊(cè)教學(xué)工作計(jì)劃
- 教育培訓(xùn)機(jī)構(gòu)所有格
- 鋼琴課教學(xué)計(jì)劃大師班參考
- 六年級(jí)語(yǔ)文期末復(fù)習(xí)心理輔導(dǎo)計(jì)劃
- 高一政治學(xué)科教學(xué)進(jìn)度計(jì)劃
- 與工商部門(mén)核對(duì)臺(tái)帳表格模板
- DB11T 593-2016高速公路清掃保潔質(zhì)量與作業(yè)要求
- 嘟嘟少兒英語(yǔ)beep演示簡(jiǎn)化版
- GB/T 699-2015優(yōu)質(zhì)碳素結(jié)構(gòu)鋼
- GB/T 19096-2003技術(shù)制圖圖樣畫(huà)法未定義形狀邊的術(shù)語(yǔ)和注法
- GB/T 13808-1992銅及銅合金擠制棒
- 項(xiàng)目安全體系圖
- 中央財(cái)政科技計(jì)劃的項(xiàng)目結(jié)題審計(jì)指引講解文課件
- 職業(yè)暴露(銳器傷)應(yīng)急預(yù)案演練腳本
- 首屆全國(guó)報(bào)刊編校技能大賽決賽試卷(一)及答案
- 材料出入庫(kù)表格范本
評(píng)論
0/150
提交評(píng)論