版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
16Java例外处理Java程序设计视频教程16Java例外处理2主要内容异常的概念(Exceptions)异常处理自定义异常递归16Java例外处理3引例1 PublicclassHelloWorld{2 publicstaticvoidmain(Stringargs[]){3 inti=0;4 Stringgreetings[]={“HelloWorld!”,”Hello!”,5 “HELLOWORLD!!”};6 while(i<4){7 System.out.println(greetings[i]);8 i++;9 }10 }11 }HelloWorld!Hello!HELLOWORLD!!Java.lang.ArrayIndexOutOfBoundsException atHelloWorld.main(HelloWorld.java:7)16Java例外处理4Exception的概念Exception(异常)就是导致程序运行时发生问题的各种情况。例如:试图打开的文件不存在网络链接中断操作数越界要加载的类不存在Java中定义了各种异常16Java例外处理5Java中定义的异常类及其继承结构ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeExceptionIOExceptionEOFExceptionArithmeticExceptionNullPointerException16Java例外处理6异常的分类Error很难恢复的严重错误,一般不由程序处理。Exception可处理异常,可以由程序处理的异常,有很多类别,主要有RuntimeException运行时出现的异常,程序可不必检测。如数组越界等。IOException输入输出异常。在设计输入输出的程序时,要经常用到。其它异常通常是由环境因素引起的,并且可以被处理的。如文件不存在,无效URL等。16Java例外处理7异常的产生异常的产生有两种情况由java虚拟机在执行程序时自动发现并产生。在程序中用throw命令产生。也称抛出异常所谓产生异常就是根据异常的类型,产生一个异常对象,“抛给”程序处理。因此,所有异常类都是Throwable类的子类。异常对象封装了异常的信息和一些相关的处理方法。16Java例外处理8异常处理异常处理的两种方式
扑获并处理异常
将方法中产生的异常抛出16Java例外处理9异常处理异常处理有两种方式扑获并处理异常在程序中用try-catch-finally结构处理异常。上交异常(转移异常)不处理发生的异常,而是将方法中产生的异常再抛出,交给调用该方法的上层方法处理。16Java例外处理10示例:TestExceptionpublicclassTestException{publicstaticvoidmain(String[]args){ intresult=newTest().divide(3,0); System.out.println(“Theresultis“+result);}}classTest{ publicintdivide(intx,inty) { returnx/y; }}运行结果:Exceptioninthread"main"java.lang.ArithmeticException:/byzeroatTest.divide(TestException.java:13)atTestException.main(TestException.java:5)16Java例外处理11异常处理方式之一:
扑获并处理异常
try…catch语句
try{
可能发生异常的java语句块
}catch(ExceptionType1eVariableName1){
处理相应异常的java语句块}catch(ExceptionType2eVariableName2){
处理相应异常的java语句块}...[finally{
语句块
}]try语句块后catch语句块和finally语句块至少要有一个。当try语句块中发生的异常与catch语句的异常类型匹配,控制转到相应的catch语句中。无论是否发生异常,finally语句块都会被执行。try,catch,finally之间不能插入其他语句。异常处理举例16Java例外处理12publicclassTestException2{publicstaticvoidmain(String[]args){ intresult=newTest().divide(3,0); System.out.println("Theresultis"+result);}}classTest{ publicintdivide(intx,inty) {intz=0;try{ z=x/y; System.out.println("try块中异常语句后的语句。");// returnz;//即使try中有return语句,finally也会被执行。但finally块后面的语句不会执行
}catch(ArithmeticExceptione){System.out.println("捕获了异常:"+e.getMessage());}finally{System.out.println("进入Finally语句块");}System.out.println("try-catch-finally后的语句");//z=-10;returnz; }}16Java例外处理13多种异常的通用处理16Java例外处理14多种异常的通用处理异常处理可以针对这个体系中的任意一个类。叶结点:是具体、专用的异常处理;中间结点:是通用的异常处理。可以处理该结点及其子类类型的异常。例:try{...}catch(Exceptione){System.err.println("Exceptioncaught:"+e.getMessage());}16Java例外处理15通用异常处理示例//本例演示异常的父子类关系,注意父类异常的catch语句应该//放在其子类异常catch语句的后面,否则,其子类异常永远不会被捕获。publicclassTestException4{publicstaticvoidmain(String[]args){try{ inta1=Integer.parseInt(args[0]);inta2=Integer.parseInt(args[1]);intresult=a1/a2; System.out.println("Theresultis"+result);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("下标越界:"+e.getMessage());}catch(ArithmeticExceptione){System.out.println("除数为零:"+e.getMessage());}catch(Exceptione)//若Exception的子类被捕获,则Exception不再会被捕获
{System.out.println("捕获了异常:"+e.getMessage());}finally{System.out.println("进入Finally语句块");}}}16Java例外处理16异常处理方式之二:上传异常将方法可能产生的异常抛出,表明该方法将不处理该异常,调用该方法的上层方法将负责处理异常,或者再将异常上传。(类似于将麻烦传给上级)publicvoidtroublesome()throwsIOException{
….. }如果一个例外在返回到main()(国务院)时还未被处理,则程序将非正常终止。16Java例外处理17抛出异常示例//本例演示抛出异常。一段调用抛出了异常的方法的程序,必须对异常进行处理//或者再将异常抛出,否则不能通过编译。publicclassTestException5{publicstaticvoidmain(String[]args)//throwsException{ intresult=newTest().divide(3,0); System.out.println("Theresultis"+result);}}classTest{ publicintdivide(intx,inty)throwsException { returnx/y; }}16Java例外处理18抛出异常使用throw语句,格式如下:throwsomeThrowableObject例:publicObjectpop()throwsEmptyStackException
{Objectobj;if(size==0)
thrownewEmptyStackException();obj=objectAt(size-1);setObjectAt(size-1,null);size--;returnobj;}抛出异常16Java例外处理19自定义异常我们可以自己定义异常类,自定义异常类是Exception类的子类,可包含普通类的内容。例:classDivideByMinusExceptionextendsException{ intdivisor; publicDivideByMinusException(Stringmsg,intdivisor){ super(msg); this.divisor=divisor; } publicintgetDivisor(){ returndivisor; }}16Java例外处理20抛出产生的异常classTest{publicintdivide(intx,inty)throwsDivideByMinusException{if(y<0)
thrownewDivideByMinusException("除数也不能为负数!",y);intresult=x/y;System.out.println("indevide!");returnresult;}}16Java例外处理21捕获异常并处理publicclassTestDefineException{publicstaticvoidmain(String[]args){try{ intresult=newTest().divide(3,0); System.out.println(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年河北省沧州市单招职业适应性考试模拟测试卷附答案
- 2026年曹妃甸职业技术学院单招职业适应性考试题库附答案
- 2026年南开大学滨海学院单招职业倾向性测试模拟测试卷及答案1套
- 2026浙江宁波市余姚市托育综合服务中心(余姚市托育园)第一次编外招聘7人笔试参考题库及答案解析
- 2026安徽淮南市寿县职业中专学校机电专业职教高考教师招聘2人笔试模拟试题及答案解析
- 2025年12月广东深圳大学选聘高层次人才4人考试备考题库附答案
- 2025江苏徐州徐工液压件有限公司招聘55人考前自测高频考点模拟试题附答案
- 2026年中煤陕西能源化工集团有限公司招聘(54人)笔试备考试题及答案解析
- 2025年度春季建信基金管理有限责任公司校园招聘6人备考题库附答案
- 2025江苏苏州市常熟市交通产业投资集团有限公司(系统)招聘26人(公共基础知识)测试题附答案
- 中国马克思主义与当代2024版教材课后思考题答案
- 2026年日历表(每月一页、可编辑、可备注)
- 2023-2024学年四川省自贡市小学语文五年级期末高分测试题详细参考答案解析
- 电力工程课程设计-某机床厂变电所设计
- Unit 2 Reading and Thinking教学课件(英语选择性必修第一册人教版)
- 儿童常用补液
- 期货基础知识(期货入门)
- GB/T 22085.2-2008电子束及激光焊接接头缺欠质量分级指南第2部分:铝及铝合金
- GB/T 10454-2000集装袋
- 全球山药产业发展现状分析
- 工业管道施工与验收规范
评论
0/150
提交评论