版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第8章 Java異常處理,本章要點,Java異常的概念 Java異常的處理機制 異常的捕獲、處理和拋出 用戶自定義異常,8.1 異常的概念及分類,8.1.1 什么是異常 8.1.2 Java異常分類,8.1.1 什么是異常?,Java把錯誤分為兩類: 一類是非致命性的,通過某種修正后程序還能繼續(xù)執(zhí)行,這類錯誤稱作異常: 負數開平方 讀取不存在的文件,另一類是致命性的,即程序遇到了嚴重的不正常狀態(tài),不能簡單地恢復執(zhí)行,這就是錯誤: JVM內部錯誤 操作系統(tǒng)錯誤 內存溢出,二、異常的產生及處理過程,Java提供了異常處理機制,在Exception類中定義了程序產生異常的條件; 對待異常通常并不結束
2、程序,而是轉去執(zhí)行某段代碼處理這個異常,設法恢復程序繼續(xù)執(zhí)行;,當程序中發(fā)生異常時,稱程序產生了一個異常事件,相應地生成異常對象; 生成的異常對象傳遞給Java運行時系統(tǒng);,異常產生和提交的過程稱為拋出異常; 異常發(fā)生時,Java運行時系統(tǒng)從生成對象的代碼塊開始,沿方法的調用棧逐層回溯,尋找相應的處理代碼,并把異常對象交給該方法處理,這一過程稱為捕獲異常。,excp1,ArithmeticException,int x;,x=x/0,0 x6b46, x=x/0 , ,異常對象,0 x6b92,0 x6b46,0 x6b46,0 x6b92, ,異常處理類,拋 出 異 常,捕 獲 異 常,Ja
3、va類庫所有的包中都定義了異常類和錯誤類; Exception 類是所有異常的父類; Error 類是所有錯誤的父類,這兩個類同時又是 Throwable 的子類。,異常和錯誤類的層次結構,示例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),自動顯示異常信息; 指明異常的種類:RuntimeException 出錯的位置;,8.2 Java異常處理機制,8.2.1 捕獲異常 8.2.2 聲明拋棄異常 8.2.3 人工拋出異常,8.2.1 捕獲異常,對所發(fā)生的異常進行的處理就是異常處理; 異常處理的重要性在于,程序不但能發(fā)現異常,還要捕獲異常。,使用 try 語句括住可能拋
5、出異常的代碼段; 用 catch 語句指明要捕獲的異常及相應的處理代碼。,try / 此處為拋出具體異常的代碼 catch(ExceptionType1 e) / 拋出ExceptionType1異常時要執(zhí)行的代碼 catch(ExceptionType2 e) / 拋出ExceptionType2異常時要執(zhí)行的代碼 catch(ExceptionTypek e) / 拋出ExceptionTypek異常時要執(zhí)行的代碼 finally / 必須執(zhí)行的代碼 ,其中,ExceptionType1,ExceptionType2,.,ExceptionTypek是產生的異常類型。 根據發(fā)生異常所屬的類
6、,找到對應的catch語句,然后執(zhí)行其后的語句序列。 不論是否捕獲到異常,總要執(zhí)行finally后面的語句。,public String getMessage( ) 用來得到有關異常事件的信息 public void printStatckTrace( ) 用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內容,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); ,運行結果,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程序處理異常的原則,對于Error和RuntimeException,可以在程序中捕獲,但不是必須; 對于IOException及其違例,必須在程序中進行捕獲和處理。,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!); ,運行結果,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!,總結,try / 此處為拋出具體異常的代碼 catch(ExceptionType1 e) / 拋出ExceptionType1時要執(zhí)行代碼 ,8.2.2 聲明拋
11、棄異常,如果一個方法可能產生某種異常,但該方法并不對這個異常進行處理,而由方法的調用者負責處理這個異常,則該方法應被聲明拋棄這種異常; 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(退出!); ,運行結果,8.2.3 人工拋出異常,人工創(chuàng)建異常對象 通過 throw 將其拋出(Java運行環(huán)境) IOException e = new IOException( ); throw e; 注意: 拋出的異常對象必須是Throwable或其子類的實例,8.3 用戶自定義異常,自定義異常類必須繼
13、承Throwable類或其子類; 自定義異常類的對象永遠不會自動拋出,只能人工創(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(人數為負值,不合理,3); System.out.println(登記人數+num); ,public MyException(String message,int id) super(message); this.idnumber=id; ,public void manager( ) try regist(-100); catch(MyException e) System.out.println(登記出錯,類別:+e.getId(); System.out.println(本次登記操作結束); ,登記出錯,類別:3 本次登記操作結束,public stati
15、c void main(String args ) Test t=new Test( ); t.manager( ); ,1. 下列描述中,正確的是,try代碼段和其后跟隨的catch代碼段之間可以有間隔的代碼; finally代碼段中不可以有try和catch代碼段; finally代碼段在異常出現的情況下不被執(zhí)行; 每個catch代碼段聲明其能處理的一種特定類型的異常。,2. 在橫線處填上正確的語句,if( t = null ) throw new ;,NullPointerException( ),第9章 Java控制臺應用程序設計,本章要點,Java命令行參數和系統(tǒng)屬性 標準I/O,文
16、件I/O,9.1 Java命令行參數,9.1.1 Java命令行參數 9.1.2 系統(tǒng)屬性,9.1.1 Java命令行參數,java 命令行參數String數組 main( ) args接收; 命令行參數以空格或雙撇號作為分隔符,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)屬性可以將運行時Java程序的相關信息參數化機制 系統(tǒng)屬性: 屬性名+屬性值+映射關系,Enumeration接口,public interface Enumeration / 判斷基礎容器是否有下一元素 public boolean hasMoreElements( ); / 返回基礎容器的下一元素 public Object nextElement( ); ,import java.util.Properties; import java.util.Enumeration;
18、Properties ps = System.getProperties( ); Enumeration pn = pertyNames( );,創(chuàng)建一個Properties的對象ps,包含了所有的系統(tǒng)屬性,返回Enumeration類型表示的所有系統(tǒng)屬性名,while ( pn.hasMoreElements() ) String pName = (String) pn.nextElement(); String pValue = ps.getProperty(pName); System.out.println(pName + - + pValue); ,判斷Enumerati
19、on類型對象中是否有下一元素,返回下一元素的值,運行結果,9.2 數據輸入/輸出,9.2.1 標準I/O操作 9.2.2 文件I/O操作,9.2.1 標準I/O操作,用戶與程序的交互方式: 用戶鍵盤標準輸入設備輸入數據 程序終端端口標準輸出設備輸出數據 控制臺應用程序 輸入/輸出標準 I/O 或控制臺 I/O,java.lang.System類,System.out 向標準輸出寫出數據 Syste.in 從標準輸入讀入數據 System.err 錯誤信息的輸出,InputStreamReader isr = new InputStreamReader(System.in); BufferedR
20、eader br = new BufferedReader(isr);,用于從字符輸入流中讀取文本; 創(chuàng)建一個BufferedReader對象從鍵盤逐行讀入數據,1. InputStreamReader類可以將讀取的字節(jié)數據轉換為字符數據; 2. 創(chuàng)建一個用于接收從鍵盤輸入的字符數據的對象,總結,在這里,程序將標準輸入流(System.in)串接到一個InputStreamReader上,而后又將其串接到一個BufferedReader上,把鍵盤輸入的內容經過處理顯示在屏幕上。,try / 每讀入一行后向顯示器輸出 s = br.readLine(); while( !s.equals() S
21、ystem.out.println(Read: + s); s = br.readLine(); br.close(); / 關閉輸入流 catch (IOException e) / 捕獲可能的異常 e.printStackTrace();,運行結果,9.2.2 文件I/O操作,在對一個文件進行I/O操作之前,必須先獲得有關這個文件的基本信息,例如文件能不能被讀取,能不能被寫入,絕對路徑是什么,文件長度是多少,等等。 類java.io.File提供了獲得文件基本信息及操作文件的一些工具。,創(chuàng)建一個新File對象,可使用以下構造方法: 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 );,使用何種構造方法經常要由其他被訪問的文件對象來決定。 例如,當在應用程序中只用到一個文件時,那么使用第一種構造方法最為實用;但如果使用了一個共同目錄下的幾個文件,則使用第二或第三種構造方法會更方便。 創(chuàng)建File類的對象后,可以應用其中的文件測定相關方法來獲取文件的信息。,與文件名相關的方法,String g
23、etName( ):獲取文件名; String getPath( ):獲取文件路徑; String getAbsolutePath( ):獲取文件絕對路徑; String getParent( ):獲取文件父目錄名稱; boolean renameTo(File newName):更改文件名,成功則返回true,否則返回false。,文件測定方法,boolean exists():文件對象是否存在 boolean canWrite():文件對象是否可寫 boolean canRead():文件對象是否可讀 boolean isFile():文件對象是否是文件 boolean isDirectory():文件對象是否是目錄 boolean isAbsolute(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高職第三學年(信息安全技術)信息安全防護2026年綜合測試題及答案
- 2026年甘肅能源化工職業(yè)學院單招綜合素質筆試模擬試題帶答案解析
- 2026年廣東工程職業(yè)技術學院高職單招職業(yè)適應性考試備考題庫有答案解析
- 土地使用權轉讓合同協(xié)議(2025年土地使用)
- 2026年廣州鐵路職業(yè)技術學院單招綜合素質筆試模擬試題帶答案解析
- 2026年鞍山職業(yè)技術學院單招職業(yè)技能考試參考題庫帶答案解析
- 2026年紅河衛(wèi)生職業(yè)學院單招職業(yè)技能筆試模擬試題帶答案解析
- 2026年德宏師范高等??茖W校單招綜合素質筆試模擬試題帶答案解析
- 2026年長沙環(huán)境保護職業(yè)技術學院單招職業(yè)技能考試模擬試題附答案詳解
- 2026年白銀礦冶職業(yè)技術學院單招職業(yè)技能筆試模擬試題帶答案解析
- 神經內外科會診轉診協(xié)作規(guī)范
- 高中詩歌手法鑒賞考試題
- 2025年及未來5年中國幽門螺桿菌藥物行業(yè)市場調查研究及發(fā)展戰(zhàn)略規(guī)劃報告
- 設備安裝安全施工培訓課件
- 2025至2030年中國水泥基滲透結晶型堵漏材料市場分析及競爭策略研究報告
- 電子屏安全培訓課件
- 婦科臨床路徑課件
- 高空作業(yè)生命繩安全使用規(guī)范
- (標準)儲物間轉讓合同協(xié)議書
- 裝修工人出意外合同范本
- 水庫大壩滲漏勘探方案
評論
0/150
提交評論