版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-1-理解异常的概念掌握异常处理机制理解Java异常的分类掌握try、catch、finally使用方法掌握throw、throws的使用方法掌握自定义异常的定义和使用方法目标-2-异常概述-1什么是异常
异常是指由于程序中的错误而导致正常的程序流程中断的一种事件。如:除数为0,数组越界,文件找不到等都属于异常。Java异常分类
从理论的角度Java中异常分为两类,分别为:Error(错误):JVM系统内部错误、资源耗尽等严重情况Exception(异常):因编程错误或偶然的外在因素导致的一般性问题,例如:对负数开平方根、空指针访问、试图读取不存在的文件、网络连接中断等。
-3-异常概述-2从编程角度考虑可以将异常(Exception)分为以下两类:非检查型(unchecked)异常:是指编译器不要求强制处理的异常,该异常是因设计或实现方式不当导致的问题,是程序员的原因导致的,可以避免这种问题的产生检查型(checked)异常:是指编译器要求必须处理的异常,是程序在运行时由于外界因素造成的一般性异常,该类异常是Exception类型及其子类(RuntimeException类及其子类除外)
从开发应用角度考虑可以将异常分为以下两类:系统异常:系统异常在性质上比应用异常更加严重,前者通常和应用逻辑无关,而是底层出现了问题,如数据库服务器的异常终止等。应用异常:应用异常是由于违反了商业规则或者业务逻辑而导致的错误。例如,一个被锁定的用户试图登入应用。
-4-Java中的异常体系-5-Java异常处理机制Java语言提供两种处理异常的机制:捕获异常:在程序运行过程中系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码,找到处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,该过程称为捕获(catch)异常。
声明抛出异常:当运行时系统得到一个异常对象,如果当前方法并不知道如何处理所出现的异常或者此时处理不合适,则可在定义方法时,声明抛出(throws)异常。-6-异常处理-1Java中关于异常处理涉及到关键字
try、catch、finally、throw和throwsJava中可用于处理异常的两种方式自行处理:可能引发异常的语句被包含在try块内,而处理异常的相应语句则存在于catch块内。抛出异常:在方法声明中包含throws子句,通知调用者,如果发生了异常,必须由调用者处理。-7-异常处理-2异常实例
使用0做除数而引发的ArithmeticException的异常情况
执行结果如下:Exceptioninthread"main"java.lang.ArithmeticException:/byzero atcom.dh.ch06.ExceptionDemo.main(ExceptionDemo.java:8)publicclassExceptionDemo{publicstaticvoidmain(String[]args){//0做除数
inti=12/0;System.out.println("结果是:"+i);}}-8-异常处理-3try/catch
在Java程序中,如果在出现异常的地方进行异常处理,可以在方法中添加两类代码块,即try、catch,通常发生异常的代码都放在try代码块中,try代码块中包含的是可能引起一个或者多个异常的代码;
try代码块的功能就是监视异常的发生。如果try块中的代码产生异常时则由catch块进行捕获并处理,也就是说catch代码块中的代码用于处理try代码块中抛出的具体异常类型的异常对象。语法格式如下:try{//代码段(可能发生异常的代码)}catch(Throwableex){//对异常进行处理的代码段}-9-异常处理-4try/catch演示
publicclassTryCatchDemo{publicstaticvoidmain(String[]args){//定义一个String变量,值为nullStringstr=null;
try{if(str.equals("hello")){System.out.println("hellojava");}
}catch(NullPointerExceptione){System.out.println("空指针异常");}}}演示结果:空指针异常-10-异常处理-5多重catch处理异常
在一个程序中可能会引发多种不同类型的异常,此时可以提供多个catch语句用来捕获用户感兴趣的异常。当引发异常时,程序会按顺序来查看每个catch语句块,并执行第一个与异常类型匹配的catch语句块,其后的catch语句块将被忽略。语法格式如下:
try{//代码段//产生异常(异常类型2)}catch(异常类型1ex){//对异常进行处理的代码段}catch(异常类型2ex){//对异常进行处理的代码段}catch(异常类型3ex){//对异常进行处理的代码段}-11-异常处理-6嵌套异常处理
代码块的某一部分引起一个异常,而整个代码块可能又引起另外一个异常。此时就需要将一个异常处理程序嵌套到另一个中。在使用嵌套的try块时,将先执行内部try块,如果没有遇到匹配的catch块,则将检查外部try块的catch块。
publicclassNestedExceptionDemo{publicstaticvoidmain(String[]args){try{try{Scannerscanner=newScanner(System.in);//从控制台中传入两个参数
intnumber1=Integer.parseInt(scanner.next());intnumber2=Integer.parseInt(scanner.next());//求商运算
doubleresult=number1/number2;System.out.println("theresultis"+result);}catch(NumberFormatExceptione){System.out.println("数字格式转换异常!");}}catch(ArithmeticExceptione){System.out.println("0做除数无意义!");}}}控制台输入“aaa”演示结果如下:aaa数字格式转换异常!thisistheendflag!-12-异常处理-7finally
在某些特定的情况下,不管是否有异常发生,总是要求某些特定的代码必须被执行,比如进行数据库连接时,不管对数据库的操作是否成功,最后都需要关闭数据库的连接并释放内存资源。这就需要用到finally关键字,finally不能单独使用必须和try结合使用,有两种用法:try-finallytry-catch-finally(较为常用)语法格式如下:try{//代码段(可能发生异常代码)}catch(Throwableex){//对异常进行处理的代码段}finally{//总要被执行的代码}-13-异常处理-8finally实例演示publicclassFinallyDemo{ publicstaticvoidmain(String[]args){ System.out.println("请打开数据库连接......"); try{ System.out.println("执行查询操作"); System.out.println("执行修改操作"); //使用0做除数
inti=12/0; System.out.println("结果是:"+i); }catch(Exceptionex){ System.out.println("除零出错!"); }finally{ System.out.println("关闭数据库连接......"); } }}执行结果如下:请打开数据库连接......执行查询操作执行修改操作除零出错!关闭数据库连接......异常处理-9throw/throws
在Java程序中如果要明确地引发异常,则需要用到throw或throws语句:throw语句:throw语句用来明确地抛出一个“异常”。throws语句:如果一个方法methodName()可以引发异常,而它本身并不对该异常进行处理,那么该方法必须声明将这个异常抛出,以使程序能够继续执行下去。这时候就要用到throws语句。throws语句的格式如下:
-14-returnTypemethodName()throwsExceptionType1,ExceptionType2{//body}-15-自定义异常-1Java语言本身提供的异常太贴近于技术,很多情况下需要构建自己的业务异常体系。 如下自定义一个异常类ZeroDivideException:publicclassZeroDivideExceptionextendsException{ publicZeroDivideException(){ super(); } publicZeroDivideException(Stringmsg){ super(msg); } publicZeroDivideException(Throwablecause){ super(cause); } publicZeroDivideException(Stringmsg,Throwablecause){ super(msg,cause); }}-16-自定义异常-2下述代码对ZeroDivideException自定义异常类进行测试。publicclassZeroDivideExceptionDemo{ /*测试方法如下*/ publicstaticvoidmain(String[]args){ try{ intresult=divide(10,0); System.out.println("结果是:"+result); }catch(ZeroDivideExceptionex){ //打印异常信息
System.out.p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度设备租赁合同中的知识产权条款
- 肠道菌群与免疫调节-第1篇
- 2024年度餐饮行业环保合作协议
- 二年级安全小黄帽
- 中药活性成分
- 外研版八年级英语下册Module6听说训练课件
- 2024版财务软件购销合同范本
- 外研版八年级英语下册Module9 Unit2 I believe that the world is what you think it is.课件
- 2024学校食堂餐饮服务授权合同
- 雄激素信号通路的探究
- 垫片冲压模具设计毕业设计论文
- 常见矩形管规格表
- 高中学生社区服务活动记录表
- Python-Django开发实战
- 小学道法小学道法1我们的好朋友--第一课时ppt课件
- 配电箱安装规范
- 中英文商务派遣函样板
- 幼儿园大班主题教案《超市》含反思
- 弯臂车床夹具设计说明书
- 企业员工健康管理存在的问题与解决途径探讨
- 浅谈初中数学教学新课标理念的运用
评论
0/150
提交评论