




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章第七章 异常异常(exception)处理处理异常异常l运行期运行期出现的错误(注意看异常信息,看名字,看行号)健壮性代码代码public class helloworld public static void main (string args) int i = 0; string greetings = hello!,no,world!; while (i 4) system.out.println (greetingsi); i+; 正常与异常正常与异常l正常与异常之比可达30 比 70%打开文件l文件不存在?l文件打不开?读取文件l没有足够可读内容?l权限不允许读写文件l磁盘满l
2、网络断线关闭文件异常机制简介异常机制简介l在进行程序设计时,错误的产生是不可避免的,如何处理错误?把错误交给谁去处理?程序又该如何从错误中恢复?这是任何程序设计语言都要解决的问题。l所谓错误,是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻碍程序的正常运行。为了增加程序的强壮性,程序设计时,必须考虑到可能发生的异常情况并做出相应的处理。异常处理的优点异常处理的优点l把错误处理代码从常规代码中分离出来l按错误类型和差别分组l对无法预测的错误进行捕获和处理l克服了传统方法的错误信息有限的问题l把错误传播给调用堆栈系统预定义异常对象系统预定义异常对象null
3、pointerexceptionthrowableexceptionerrorvirtualmachineerrorruntimeexceptionarithmeticexceptionclassnotfoundexceptionfilenotfoundexceptionioexception须查异常与不须查异常须查异常与不须查异常l须查异常多数的 throwable、exceptionl不须查异常error、runtimeexceptionl当在一个方法的代码中抛出一个须查异常时,这个异常或者被方法中的try-catch结构捕获,或者在方法的throws语句中声明l编译器检查程序保证所有须查
4、异常都被程序显示的处理exceptionl类 exception 定义了一些你的程序可能出现的轻度错误条件l异常可能发生在:你试图打开的文件并不存在 网络连接中断操作数处理的超出预描述的范围需要加载的文件丢失lerror 类定义了一些严重的错误条件java的异常处理是通过的异常处理是通过5个关键字来实现的:个关键字来实现的:try、catch、 finally、throw、throws 捕获异常捕获异常 catchtryfinally执行可能产生执行可能产生 异常的代码异常的代码 捕获异常捕获异常 无论是否发生异常,无论是否发生异常,代码总能执行代码总能执行手动抛出异常手动抛出异常 抛出异常抛
5、出异常 throw声明异常声明异常 声明方法可能要声明方法可能要抛出的各种异常抛出的各种异常 throwstry,catch 语句的使用语句的使用try /这里的代码可能抛出一个特别的异常 catch (myexceptiontype e) 如果myexceptiontype 的异常被抛出,将执行这里的代码 catch (exception e) 如果一个一般 exception 被抛出时,将执行这里的代码异常的执行流程异常的执行流程 n正常顺序n1,2,3,5 n异常顺序n1,2,4,5ntry块外异常不理会try123catch(exception e)45异常发生处异常发生处在在try/
6、catch块后加入块后加入finally块,可以确保无论是否发生异常,块,可以确保无论是否发生异常,finally块中的代码总能被执行块中的代码总能被执行try 块块 finally 块块 catch 块块 无异常无异常 有异常有异常 举例举例 public class helloworld2 public static void main (string args) int i = 0; string greetings = hello world!, no, i mean it!, hello world! ; while (i 4) try system.out.println (gre
7、etingsi); catch (arrayindexoutofboundsexception e) system.out.println(re-stting index value); finally system.out.println(this is always printed); i+; 异常处理机制异常处理机制l如果一个异常没有在当前的try、catch中被处理,它将被抛至方法的调用者处。l如果异常被返回到main方法里,并且仍然没有被处理,程序将异常中止。练习练习l编写一个类exceptiontest1,在main方法中使用try、catch、finally:在try块中,编写被
8、0除的代码在catch块中,捕获被0除所产生的异常,并且打印异常信息在finally块中,打印一条语句多重catch块l一段代码可能会引发多种类型的异常l当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句l执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略 抛出异常l如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理 练习练习l编写类exceptiontest2:定义两个方法:go()和main() 在go方法中声明要抛出异常,在该方法体内,抛出一个exception对象在main()方法中,调用go方法,使用tr
9、y/catch捕获go方法中抛出的异常用户自定义异常对象用户自定义异常对象l系统预定义异常类代表了程序运行过程中可能产生的绝大多数异常。如果希望记录和应用相关的错误信息,则可创建自己的异常类。该类的定义和普通类无太大区别,只需继承exception类或runtimeexception类即可。例如:public class myprojexception extends exception 自定义异常自定义异常l通过继承java.lang.exception类声明自己的异常类。l在方法适当的位置生成自定义异常的实例,并用throw抛出。l在方法的声明部分用throws声明该方法可能抛出的异常。自
10、定义异常举例自定义异常举例:public class servertimedoutexception extends exceptionlprivate string servername;lprivate int port;lpublic servertimedoutexception(string servername, int port)lthis.servername=servername;lthis.port = port;llpublic int getport()lreturn port;llpublic void setport(int port)lthis.port = po
11、rt;llpublic string getservername()lreturn servername;llpublic void setservername(string servername)lthis.servername = servername;llpublic class testlpublic static void main(string args)ltest t=new test();ltryllt.connectme(sinojava, 80);l catch (servertimedoutexception e)lsystem.out.println(连接服务器连接服务
12、器+e.getservername()+,端口为端口为+e.getport()+失败失败);llpublic void connectme(string servername,int port) throws servertimedoutexceptionlif(servername.equals(sinojava)&port=80)lsystem.out.println(连接成功连接成功!);lelselthrow new servertimedoutexception(sinojava, port);lljava异常的使用异常的使用l对非运行时异常必须捕获或声明。对运行时异常,若不能预测它
13、何对非运行时异常必须捕获或声明。对运行时异常,若不能预测它何时发生,程序可不作处理,而是交给时发生,程序可不作处理,而是交给java运行时系统来处理;若运行时系统来处理;若能预知它可能发生的地点和时间,则应在程序中处理,而不应简单能预知它可能发生的地点和时间,则应在程序中处理,而不应简单地交给运行时系统。地交给运行时系统。l异常可以人为地抛出,用异常可以人为地抛出,用throw new 语句。语句。l异常可以是系统已经定义好的,也可以是用户自己定义的。用户自异常可以是系统已经定义好的,也可以是用户自己定义的。用户自己定义的异常一定继承自己定义的异常一定继承自throwable或或exception类。类。l在自定义异常类时,如果它所对应的异常事件通常总是在运行时产在自定义异
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB31/T 306-2022公交客车运行技术要求
- DB31/T 1231-2020奶牛场牛结核病、布鲁氏菌病风险评估分级规程
- DB31/ 760-2013线性菲涅尔太阳能跟踪聚焦集热系统安全、能效技术要求及热性能试验方法
- 2025大学生综合保险合同示范文本
- 运动防护用具的绿色体育产业与体育消费考核试卷
- 校长在高一学生家长会上讲话新高考政策解读与选科指导
- 离婚网店分割协议:网络调解下的网店运营权分割与补偿
- 酒店客房售后服务补充协议
- 节假日老人探望权轮换管理协议
- 房地产企业置业顾问培训及职业发展合同
- 《高氮马氏体不锈钢》
- 管道注水法试验记录
- 2023年湖北省技能高考文化综合试题及答案
- 无机化学说课精讲课件
- 静脉输液外渗的预防与处理完整版课件
- 民用无人驾驶航空器系统驾驶员训练大纲
- 装修客户需求表
- 大树遮阳脚手架搭设方案
- 外源水杨酸对高温胁迫下甘蓝幼苗生长及生理特性的影响-第1篇
- 模具材料及表面处理全优秀课件
- 人教版八年级下册英语全册单词表学生默写版直接打印
评论
0/150
提交评论