java学习课件 第九章 异常处理

上传人:无*** 文档编号:243939092 上传时间:2024-10-01 格式:PPT 页数:45 大小:1.10MB
返回 下载 相关 举报
java学习课件 第九章 异常处理_第1页
第1页 / 共45页
java学习课件 第九章 异常处理_第2页
第2页 / 共45页
java学习课件 第九章 异常处理_第3页
第3页 / 共45页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java2,程序设计基础,信息学院计算机技术系,第九章 异常处理,9.1,异常处理的基本概念,9.2,异常处理类,9.3,捕获与异常处理,9.4,抛出异常,9.5,自定义异常,引入,我们总是试图避免在软件程序中错误的发生,但是百分之百没有错误的程序是不存在的。无论怎样,如果我们能适当的处理错误,将会极大的改善程序的可读性、可靠性以及可维护性。Java编程语言使用异常来处理错误。这章主要讲述在什么时候和怎样使用异常来处理错误,。,10/1/2024,3,9.1,异常处理的基本概念,语法错误:编译时被检测出来的错误,这种错误一旦产生并不会生成运行代码。,运行错误:在程序运行时代码序列中产生的一种出错情况。这种运行错误倘若没有及时进行处理,可能会造成程序中断、数据遗失乃至系统崩溃等问题。这种运行错误也就是我们常说的,“,异常,”,10/1/2024,4,9.1.1,错误与异常,运行错误是程序运行过程中产生的错误,根据性质的不同,运行错误又分为系统运行错误和逻辑运行错误。,系统运行错误简称为错误,是指程序在执行过程中所产生对操作系统的损害。,逻辑运行错误是指程序不能实现程序员的设计意图和设计功能而产生的错误,这种错误也被称为异常。,例,1,public class TestEx1,public static void,main(String,args,),System.out.println(1 / 0) ;,例,2,public class TestEx2,public static void,main(String,args,),System.out.println,(-,异常发生之前,-) ;,System.out.println(1 / 0) ;,System.out.println,(-,异常发生之后,-) ;,异常是指在程序运行过程中发生的错误,会打断程序正常执行。,该语句未被执行,9.1,异常处理的基本概念,10/1/2024,8,9.1.2 Java,语言的异常处理机制,Java,异常处理机制,简单地说,就是程序在运行时,发现异常的代码可以,“,抛出,”,一个异常,运行系统,“,捕获,”,该异常,并交由程序员编写的相应代码进行异常处理。,10/1/2024,9,9.2,异常处理类,由于,Java,语言中定义了很多异常类,而每个异常类都代表一种运行错误,所以说,,Java,的异常类是处理运行时错误的特殊类,类中包含了该运行错误的信息和处理错误的方法等内容。,10/1/2024,程序对错误与异常的处理方式有三种:一是程序不能处理的错误;二是程序应避免而不捕获的运行时异常;三是必须捕获的非运行时异常。,9.2,异常处理类,异常处理类的继承关系,1.,观察,io,类,-,FileInputStream,read(),方法,2.,此方法结构为:,public,int,read,() throws,IOException,3.,此处的,IOException,属于,必须捕获的非运行时异常,课堂练习,借助,API,文档,观察异常的分类。,小结,Java,中定义了很多异常类,每个异常类都代表了一种常见的运行错误,类中包含了该运行错误的信息和处理错误的方法等内容。,每当,Java,程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个相应的该异常类的对象。,一旦一个异常对象产生了,就将其抛出到其调用程序中,发出已经发生问题的信号。,然后,调用方法捕获抛出的异常,在可能时,再恢复回来。,9.2,异常处理类,10/1/2024,14,9.3,捕获与处理异常,在,Java,语言中,异常处理是通过,try,、,catch,、,finally,、,throw,、,throws,五个关键字来实现的。异常处理的理论似乎很繁琐,但实际使用时并不复杂。,10/1/2024,15,当一个异常类的对象被捕获或接收后,用户程序就会发生流程跳转,系统终止当前的流程而跳转到专门的异常处理语句块,或直接跳出当前程序和,java,虚拟机回到操作系统。,10/1/2024,16,在,Java,的异常处理机制中,提供了,try-catch-finally,语句来捕获和处理一个或多个异常,其语法格式如下:,try,/,监视,/,可能发生异常的程序代码,catch,(异常类型,e,),/,捕获,e,为异常对象名,/,对异常的处理代码,比如输出异常信息,finally/,此语句块可以缺省,/,无论是否发生异常都要执行的程序代码,10/1/2024,17,catch,块紧跟在,try,块的后面,用来接收,try,块可能产生的异常,一个,catch,语句块通常会用同样方式来处理它所接收到的所有异常,但是实际上一个,try,块可能产生多种不同的异常,如果希望能采取不同的方法来处理这些不同的异常,就需要使用多异常处理机制。,public class TestEx3,public static void,main(String,args,),System.out.println,(-,异常发生之前,-) ;,try,System.out.println(1 / 0) ;,catch (,ArithmeticException,ae,),System.out.println,(,发生异常类:,) ;,System.out.println(ae,) ;,System.out.println,(-,异常发生之后,-) ;,例:使用,try/catch,进行异常处理,这说明使用,try.catch,后使程序继续向后运行。,10/1/2024,20,【,例,9.2】,使用,try-catch-finally,语句对例,9.1,中产生的异常进行捕获与处理。,/app9_2.java,异常的捕获与处理,public class app9_2,public static void,main(String,args,),int,i;,int,a=1,2,3,4;,for (i=0;i5;i+),try,System.out.print(“a”+i+”/”+i,+”=”+(,ai/i,);,catch(ArrayIndexOutOfBoundsException,e),System.out.print,(“,捕获到了数组下标越界异常”,);,10/1/2024,21,【,例,9.2】,续,catch(ArithmeticException,e),System.out.print,(“,异常类名称是:”,+e); /,显示异常信息,catch(Exception,e),System.out.println,(“,捕获”,+,e.getMessage,()+”,异常!”,); /,显示异常信息,finally,System.out.println,(“ finally i=”+i);,System.out.println,(“,继续!”,);,10/1/2024,22,程序运行结果为:,异常类名称是:,java.lang.ArithmeticException,:/ by zero finally i=0,a1/1=2 finally i=1,a2/2=1 finally i=2,a3/3=1 finally i=3,捕获到了数组下标越界异常,finally i=4,继续!,获得异常类的有关信息,获取异常性质的三个方法:,public String,toString,(),:,返回描述异常类信息的字符串。,public void,printStackTrace,(),:,输出当前异常对象的堆栈使用轨迹。,public String,getMessage,(),:,返回错误性质。,例:,多个,catch,块,多个,catch,块,单个,try,块能有许多,catch,块,当,try,块有可以引起不同型异常的语句时,这是必须的。,下列代码包括三种类型的异常,。,例:,public class,TryCatch, public static void,main(String,args,),int,array=0,0;,int,num1,num2,result=0;,num1=100;,num2=0;,try, result = num1/num2;,System.out.println(num1/array2);,/,更多语句,catch,(,ArithmeticException,e),System.out.println(Error,Division,by zero ) ; ,catch,(,ArrayIndexOutOfBoundsException,e),System.out.println(Error.Out,of bounds); ,catch,(Exception e),System.out.println(Some,other error: ); ,System.out.println(The,result is,:,+result);,/,程序继续,分析:,1.,在上述代码里,,try,块有许多语句而每个语句都能引起异常。有三个,catch,块跟随,try,块,其中一个处理每个异常类型。,2.,拥有最特殊异常类的,catch,块必须先写。,例如:如果你先写有,Exception,(异常)类的,catch,块,其他,catch,块将永远不被执行。,javac,编译器将给出错误说明,告诉特殊的异常捕获尚未得到。这是,因为,Exception,类是所有异常的父类,处理引发的所有异常。,3.,你是否注意到,在,try,块的第二语句没有执行。这是因为当异常发生时,程序的流程被打断,然后执行在特定,catch,块的语句。,作业,1.,编写一个能通过编译但是运行时会出现ArithmeticException异常的程序。,2.,实验,45,10/1/2024,29,9.4,抛出异常,根据异常类的不同,抛出异常的方法也不相同。,1,系统自动抛出的异常:所有系统定义的运行异常都可以由系统自动抛出。,2. throw,语句抛出异常,通常情况下,异常是由系统自动捕获的,。,但程序员也可以自己通过,throw,语句抛出异常。,throw,语句的格式为:,throw new,异常类名(信息),其中异常类名为,系统异常类名,或,用户自定义,的异常类名,,“,信息,”,是可选信息。如果提供了该信息,,toString,(),方法,的返回值中将增加该信息内容。,例:,9.3,注意第,10,行语句手动抛出异常,3,抛出异常的方法与调用方法处理异常,;,throws,短语:,如果不在方法中直接处理可能发生的异常,可以声明方法时加上,throws,短语,而要求在调用这个方法时捕获这个异常并处理。(当然,调用这个方法的方法也可以再次将异常抛出),格式:,throws,异常类型,class,MathDemo,/,此方法有没有可能发生异常?,public,int,div(int,i,int,j),return i / j ;,public class TestEx4,public static void,main(String,arg,),System.out.println(new,MathDemo().div(10,0) ;,改进:,div,方法抛出异常,,在调用这个方法时捕获这个异常并处理,.,class,MathDemo,/,此方法有没有可能发生异常?,public,int,div(int,i,int,j) throws Exception,return i / j ;,public class TestEx4,public static void,main(String,arg,),try,System.out.println(new,MathDemo().div(10,0) ;,catch (Exception e),System.out.println(e,) ;,class,MathDemo,/,此方法有没有可能发生异常?,public,int,div(int,i,int,j) throws Exception,return i / j ;,public class TestEx4,public static void,main(String,arg,) throws Exception,System.out.println(new,MathDemo().div(10,0) ;,在,main,方法中再次将异常抛出,观察运行结果,则发现异常交给,JVM,去处理了。,4.,由方法抛出异常交系统处理。,class,MathDemo,/,此方法有没有可能发生异常?,public,int,div(int,i,int,j) throws Exception,return i / j ;,public class TestEx4,public static void,main(String,arg,) throws Exception,System.out.println(new,MathDemo().div(10,0) ;,观察运行结果,则发现异常交给,JVM,去处理了。默认情况下所有的异常都是交给,JVM,去处理了。,4.,由方法抛出异常交系统处理。,9.5,自定义,Java,异常,若用户程序有其特殊的逻辑要求,可以通过,java,的异常处理机制来处理用户自定义的异常,这时用户可以自定义异常,但必须继承自,Throwable,或,Exception,类,建议用,Exception,类,9.5,自定义,Java,异常,自定义异常的基本形式如下所示:,class,MyException,extends Exception ,MyException(String,ErrorMessage,)/,构造方法,Super(ErrorMessage,);/,父类的构造方法,。,说明:,1.,异常是一个类,用户定义的异常必须继承自,Throwable,或,Exception,类,建议用,Exception,类,2.,为自定义的,异常类定义属性,和方法,或覆盖父类方法等,使这些属性和方法能体现该类异常所对应的错误信息。,9.5,自定义,Java,异常,3.,字符串,ErrorMessage,即为要输出的错误信息。若要抛出用户自定义的异常对象,则使用,throws,关键字,其使用方法如下:,throw new,MyException,(,“,错误信息,”,),;程序在执行过程中,若满足了某种异常条件,则相应的异常对象将会被创建,然后抛出。,自定义异常举例:,编写一个程序,SumException,使用自定义的异常类,NumberRangerException,类来计算,0-100,之间的两个整数的和。用户键盘输入两个数字,如果其中一个数字超出范围将显示,“,输入的整数必须在,0-100,之间,”,,否则计算两数的和。,import,java.util,.*;,/,自定义异常类,class,NumberRangerException,extends,Exception,NumberRangerException(String,ErrorMessage,)/,构造方法,super,(ErrorMessage,);/,父类的构造方法,public,class,SumException,public,static,int,sum(,int,num1,int,num2),throws,NumberRangerException,if,(num1100)|(num2100),throw,new,NumberRangerException,(,输入的整数必须在,0-100,之间,);,return,num1+num2;,public static void,main(String,args,),int,num1,num2;,try,Scanner reader=new,Scanner(System.,in,);,System.,out,.println,(,请输入第一个整数,);,num1=,reader.nextInt,( );,System.,out,.println,(,请输入第二个整数,);,num2=,reader.nextInt,( );,System.,out,.println,(,两数的和为,:+,sum,(num1,num2);,catch(NumberRangerException,e ), /,调用,NumberRangerException,类中的,getMessage,(),方法输出出错信息,System.,out,.println(e.getMessage,();,异常处理小结,1.,异常处理机制:监视,(,抛出异常,),捕获,处理,try catch,语句:,try,/,监视,/,可能发生异常的程序代码,catch,(异常类型,e,),/,捕获,e,为异常对象名,/,对异常的处理代码,比如输出异常信息,finally/,此语句块可以缺省,/,无论是否发生异常都要执行的程序代码,异常处理小结(续),2.,异常的两种处理方式:,try,catch,.finally,throw,及,throws,1,自定义一个异常,DevideByMinusException,(除数不能为负的异常),假定该异常类为,ArithmeticException,的子类。,作业,2,(1),设计一个银行帐户管理类,Account,属性:账号,帐户余额,方法:,构造方法:设置账号,余额,查询余额(,query,),:,显示余额,deposit:,存款方法,参数是,double,型的金额,withdraw:,取款方法,参数是,double,型的金额,(2),创建的帐户类,其中定义存钱、取钱等两个个方法附加下述异常:,a.,AccountOverdrawnException,当有了这个要取出比帐户上更多的钱的尝试时。,b.,InvalidDepositException,当无效钱数(小于,0,)存入时。,设计一个,TestAccount,类创建一个用户的帐户,余额为,1000,元查询余额,存入,200,元,取出,500,元显示用户账号和余额查询余额,取出,5000,元显示用户账号和查询余额,.,作业,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!