Java精解案例教程-第8课-Java异常处理课件_第1页
Java精解案例教程-第8课-Java异常处理课件_第2页
Java精解案例教程-第8课-Java异常处理课件_第3页
Java精解案例教程-第8课-Java异常处理课件_第4页
Java精解案例教程-第8课-Java异常处理课件_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章Java异常处理第八章Java异常处理1本章内容Java异常的概念和处理机制Java异常的分类异常的捕获、处理和抛出使用用户自定义异常本章内容Java异常的概念和处理机制2Java异常Java程序运行过程中所发生的异常事件可分为两类:错误(Error):JVM系统内部错误、资源耗尽等严重情况违例(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,例如:对负数开平方根空指针访问试图读取不存在的文件网络连接中断Java异常Java程序运行过程中所发生的异常事件可分为两类3Java异常举例(1)(0801)publicclassTest8_1{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; for(inti=0;i<5;i++){ System.out.println(friends[i]); } System.out.println("\nthisistheend");}}Java异常举例(1)(0801)publicclass4Java异常举例(2)程序Test8_1运行结果:javaTest8_1lisabilykessyExceptioninthread"main"java.lang.ArrayIndexOutOfBoundsExceptionatTest8_1.main(Test8_1.java:5)Pressanykeytocontinue...Java异常举例(2)程序Test8_1运行结果:java5Java异常类层次Java异常类层次6常见异常RuntimeException错误的类型转换数组下标越界空指针访问IOExeption从一个不存在的文件中读取数据越过文件结尾继续读取连接一个不存在的URL常见异常RuntimeException7异常处理机制Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。程序员通常只能处理违例(Exception),而对错误(Error)无能为力异常处理机制Java程序的执行过程中如出现异常,会自动生成一8异常处理举例(1)(0802)publicclassTest8_2{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; try{ for(inti=0;i<5;i++){ System.out.println(friends[i]); } }catch(java.lang.ArrayIndexOutOfBoundsExceptione){System.out.println("indexerr"); } System.out.println("\nthisistheend");}}异常处理举例(1)(0802)publicclassTe9异常处理举例(2)程序java8_2运行结果:javajava8_2lisabilykessyindexerrthisistheendPressanykeytocontinue...异常处理举例(2)程序java8_2运行结果:javaja10捕获违例

捕获异常是通过try-catch-finally语句实现的。try{ ...... //可能产生违例的代码}catch(ExceptionName1e){ ...... //当产生ExceptionName1型违例时的处置措施}catch(ExceptionName2e){...... //当产生ExceptionName2型违例时的处置措施}[finally{...... //无条件执行的语句 }]捕获违例 捕获异常是通过try-catch-finally语11捕获违例try

捕获违例的第一步是用try{…}语句块选定捕获违例的范围。catch

在catch语句块中是对违例对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的违例对象。与其它对象一样,可以访问一个违例对象的成员变量或调用它的方法。getMessage()方法,用来得到有关异常事件的信息printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。捕获违例try12捕获违例finally捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。finally语句是任选的捕获违例finally13IOException违例处理举例(1)(0803)importjava.io.*;publicclassTest8_3{ publicstaticvoidmain(String[]args){ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){System.out.print((char)b); b=in.read(); } in.close();}}IOException违例处理举例(1)(0803)impo14IOException违例处理举例(2)程序Test8_3编译结果:E:\ex\javacTest8_3.javaE:\ex\Test8_3.java:4:未报告的异常java.io.FileNotFoundException;必须被捕获或被声明抛出 FileInputStreamin=newFileInputStream("myfile.txt");^E:\ex\Test8_3.java:6:未报告的异常java.io.IOException;必须被捕获或被声明抛出 b=in.read();^E:\ex\Test8_3.java:9:未报告的异常java.io.IOException;必须被捕获或被声明抛出b=in.read();^E:\ex\Test8_3.java:11:未报告的异常java.io.IOException;必须被捕获或被声明抛出in.close();^4个错误IOException违例处理举例(2)程序Test8_3编15IOException违例处理举例(3)(0804)importjava.io.*;publicclassTest8_4{ publicstaticvoidmain(String[]args){ try{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }catch(IOExceptione){ System.out.println(e); }finally{ System.out.println("It’sok!"); } }}IOException违例处理举例(3)(0804)impo16声明抛弃违例(0805)声明抛弃违例是Java中处理违例的第二种方式如果一个方法(中的语句执行时)可能生成某种违例,但是并不能确定如何处理这种违例,则此方法应声明抛弃违例,表明该方法将不对这些违例进行处理,而由该方法的调用者负责处理声明抛弃举例: publicvoidreadFile(Stringfile) throwsFileNotFoundException{ ……

//读文件的操作可能产生FileNotFoundException类型的违例 FileInputStreamfis=newFileInputStream(file); ..……}声明抛弃违例(0805)声明抛弃违例是Java中处理违例的第17声明抛弃违例举例importjava.io.*;publicclassTest8_5{ publicstaticvoidmain(String[]args){ Test8_5t=newTest8_5(); try{

t.readFile(); }catch(IOExceptione){System.out.println(e);} } publicvoidreadFile()throwsIOException{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }}声明抛弃违例举例importjava.io.*;18重写方法声明抛弃违例原则重写方法不能抛出比被重写方法范围更大的违例类型publicclassA{ publicvoidmethodA()throwsIOException{ …… }}publicclassB1extendsTestA{ publicvoidmethodA()throwsFileNotFoundException{ …… }}publicclassB2extendsTestA{ publicvoidmethodA()throwsException{ …… }}重写方法声明抛弃违例原则重写方法不能抛出比被重写方法范围更大19抛弃例外Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要需要人工创建并抛出首先要生成例外对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。IOExceptione=newIOException();throwe;可以抛弃的例外必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:

thrownewString("wanttothrow");0806/test.java抛弃例外Java异常类对象除在程序执行过程中出现异常时由系统20创建用户自定义例外类(0806)用户自定义例外类MyException,用于描述数据取值范围错误信息:classMyExceptionextendsException{ privateintidnumber; publicMyException(Stringmessage,intid){ super(message); this.idnumber=id; } publicintgetId(){ returnidnumber; }}创建用户自定义例外类(0806)用户自定义例外类MyExce21使用用户自定义例外类publicclassTest8_6{publicvoidregist(intnum)throwsMyException{ if(num<0){ thrownewMyException("人数为负值,不合理",3); }

System.out.println("登记人数"+num);}publicvoidmanager(){ try{ regist(100); }catch(MyExceptione){ System.out.print("登记失败,出错种类"+e.getId()); } System.out.print("本次登记操作结束");}publicstaticvoidmain(Stringargs[]){ Test8_6t=newTest8_6(); t.manager();}}使用用户自定义例外类publicclassTest8_622总结Java异常的概念和处理机制Java异常的分类异常的捕获、处理和抛出使用用户自定义异常总结Java异常的概念和处理机制23第八章Java异常处理第八章Java异常处理24本章内容Java异常的概念和处理机制Java异常的分类异常的捕获、处理和抛出使用用户自定义异常本章内容Java异常的概念和处理机制25Java异常Java程序运行过程中所发生的异常事件可分为两类:错误(Error):JVM系统内部错误、资源耗尽等严重情况违例(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,例如:对负数开平方根空指针访问试图读取不存在的文件网络连接中断Java异常Java程序运行过程中所发生的异常事件可分为两类26Java异常举例(1)(0801)publicclassTest8_1{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; for(inti=0;i<5;i++){ System.out.println(friends[i]); } System.out.println("\nthisistheend");}}Java异常举例(1)(0801)publicclass27Java异常举例(2)程序Test8_1运行结果:javaTest8_1lisabilykessyExceptioninthread"main"java.lang.ArrayIndexOutOfBoundsExceptionatTest8_1.main(Test8_1.java:5)Pressanykeytocontinue...Java异常举例(2)程序Test8_1运行结果:java28Java异常类层次Java异常类层次29常见异常RuntimeException错误的类型转换数组下标越界空指针访问IOExeption从一个不存在的文件中读取数据越过文件结尾继续读取连接一个不存在的URL常见异常RuntimeException30异常处理机制Java程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。程序员通常只能处理违例(Exception),而对错误(Error)无能为力异常处理机制Java程序的执行过程中如出现异常,会自动生成一31异常处理举例(1)(0802)publicclassTest8_2{ publicstaticvoidmain(String[]args){ Stringfriends[]={"lisa","bily","kessy"}; try{ for(inti=0;i<5;i++){ System.out.println(friends[i]); } }catch(java.lang.ArrayIndexOutOfBoundsExceptione){System.out.println("indexerr"); } System.out.println("\nthisistheend");}}异常处理举例(1)(0802)publicclassTe32异常处理举例(2)程序java8_2运行结果:javajava8_2lisabilykessyindexerrthisistheendPressanykeytocontinue...异常处理举例(2)程序java8_2运行结果:javaja33捕获违例

捕获异常是通过try-catch-finally语句实现的。try{ ...... //可能产生违例的代码}catch(ExceptionName1e){ ...... //当产生ExceptionName1型违例时的处置措施}catch(ExceptionName2e){...... //当产生ExceptionName2型违例时的处置措施}[finally{...... //无条件执行的语句 }]捕获违例 捕获异常是通过try-catch-finally语34捕获违例try

捕获违例的第一步是用try{…}语句块选定捕获违例的范围。catch

在catch语句块中是对违例对象进行处理的代码,每个try语句块可以伴随一个或多个catch语句,用于处理可能产生的不同类型的违例对象。与其它对象一样,可以访问一个违例对象的成员变量或调用它的方法。getMessage()方法,用来得到有关异常事件的信息printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。捕获违例try35捕获违例finally捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。finally语句是任选的捕获违例finally36IOException违例处理举例(1)(0803)importjava.io.*;publicclassTest8_3{ publicstaticvoidmain(String[]args){ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){System.out.print((char)b); b=in.read(); } in.close();}}IOException违例处理举例(1)(0803)impo37IOException违例处理举例(2)程序Test8_3编译结果:E:\ex\javacTest8_3.javaE:\ex\Test8_3.java:4:未报告的异常java.io.FileNotFoundException;必须被捕获或被声明抛出 FileInputStreamin=newFileInputStream("myfile.txt");^E:\ex\Test8_3.java:6:未报告的异常java.io.IOException;必须被捕获或被声明抛出 b=in.read();^E:\ex\Test8_3.java:9:未报告的异常java.io.IOException;必须被捕获或被声明抛出b=in.read();^E:\ex\Test8_3.java:11:未报告的异常java.io.IOException;必须被捕获或被声明抛出in.close();^4个错误IOException违例处理举例(2)程序Test8_3编38IOException违例处理举例(3)(0804)importjava.io.*;publicclassTest8_4{ publicstaticvoidmain(String[]args){ try{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }catch(IOExceptione){ System.out.println(e); }finally{ System.out.println("It’sok!"); } }}IOException违例处理举例(3)(0804)impo39声明抛弃违例(0805)声明抛弃违例是Java中处理违例的第二种方式如果一个方法(中的语句执行时)可能生成某种违例,但是并不能确定如何处理这种违例,则此方法应声明抛弃违例,表明该方法将不对这些违例进行处理,而由该方法的调用者负责处理声明抛弃举例: publicvoidreadFile(Stringfile) throwsFileNotFoundException{ ……

//读文件的操作可能产生FileNotFoundException类型的违例 FileInputStreamfis=newFileInputStream(file); ..……}声明抛弃违例(0805)声明抛弃违例是Java中处理违例的第40声明抛弃违例举例importjava.io.*;publicclassTest8_5{ publicstaticvoidmain(String[]args){ Test8_5t=newTest8_5(); try{

t.readFile(); }catch(IOExceptione){System.out.println(e);} } publicvoidreadFile()throwsIOException{ FileInputStreamin=newFileInputStream("myfile.txt"); intb; b=in.read(); while(b!=-1){ System.out.print((char)b); b=in.read(); } in.close(); }}声明抛弃违例举例importjava.io.*;41重写方法声明抛弃违例原则重写方法不能抛出比被重写方法范围更大的违例类型publicclassA{ publicvoidmethodA()throwsIOException{ …… }}publicclassB1extendsTestA{ publicvoidmethodA()throwsFileNotFoundException{ …… }}publicclassB2extendsTestA{ publicvoidmethodA()t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论