收藏 分销(赏)

Java课程讲义(No.9).ppt

上传人:仙人****88 文档编号:14760716 上传时间:2026-11-14 格式:PPT 页数:34 大小:180KB 下载积分:10 金币
下载 相关
Java课程讲义(No.9).ppt_第1页
第1页 / 共34页
Java课程讲义(No.9).ppt_第2页
第2页 / 共34页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,上海财经大学 信息管理与工程学院,Java,面向对象程序设计,主讲教师:郑大庆,zhengdaqing,上海财经大学 信息管理与工程学院,第九讲,Java,的异常处理,异常(,Exceptions),的概念,异常的处理,自定义异常,本章主要内容,2,上海财经大学 信息管理与工程学院,程序的错误,程序执行时难免会出现错误(程序设计因素,用户输入错误,运行时环境因素等),如:,试图打开的文件不存在,网络链接中断,操作符越界,要加载的类文件不存在,3,上海财经大学 信息管理与工程学院,1,Public class,HelloWorld,2public static void main(String,args,),3,int,i=0;,4String greetings=“Hello World!”,”Hello!”,5“HELLO WORLD!”;,6while(i4),7,System.out.println(greetingsi,);,8i+;,9,10,11,Hello World!,Hello!,HELLO WORLD!,Java.lang.ArrayIndexOutOfBoundsException,at HelloWorld.main(HelloWorld.java:7),例6-1,4,上海财经大学 信息管理与工程学院,处理错误的方式,函数式编程中,直接检测调用函数返回值以确定错误内容,存在问题,检测错误返回的编码工作量大,逻辑上复杂,返回的错误信息有限,无详细的位置性质等,异常处理:,Java,检测和报告错误的机制,throws,,,使不能正常结束的程序(方法)抛出一个封装了错误信息的对象异常,使用异常处理程序处理异常错误,5,上海财经大学 信息管理与工程学院,Java,中定义了多种异常。,Java.lang.Throwable,是这些类的父类。,Throwable,Error,Exception,VirtualMachineError,AWTError,RuntimeException,IOException,EOFException,FileNotFoundException,ArithmeticException,NullPointerException,IndexOutOfBoundsException,Java,中的异常类,6,上海财经大学 信息管理与工程学院,Error,很难恢复的严重错误,一般属于系统内部错误,,不由程序处理。,发生时,由用户按照系统提示关闭程序。,异常(,Exception),:,由程序本身或环境产生的错误,可通过异常处理来进行有效的控制。,运行时异常(,RuntimeException,),程序设计或实现上的问题,如数组越界等。,其它异常,通常是由环境因素引起的,并且可以被处理的。,如文件不存在,无效,URL,等。,Java,中定义的异常种类,7,上海财经大学 信息管理与工程学院,Exception,类的几个方法,String,getMessage,(),:,返回,详细信息,String,toString,(),:,返回描述,包括详细信息,void,printStackTrace,():,打印出异常发生的路径,即引起异常的方法调用的序列,方法均继承自,Throwable,类,8,上海财经大学 信息管理与工程学院,异常处理,良好的程序应具备,预见,并,处理,可能发生的各种异常的功能。,Java,中的异常处理方法:,捕获并处理异常(由发生异常的方法自行处理),将方法中产生的异常抛出,在其他程序调用该方法时进行处理,9,上海财经大学 信息管理与工程学院,异常处理:捕获与处理异常,try,语句块,catch,语句块,finally,语句块,10,上海财经大学 信息管理与工程学院,try,语句块,一般形式:,try,java statements;/,一条或多条可能产生异常的,java,语句。,try,语句后必须跟随至少一个,catch,或,finally,语句块。,11,上海财经大学 信息管理与工程学院,catch,语句块,catch,语句块提供发生异常时的处理方法。,一般格式:,例,6-1改,1,catch(,SomeThrowableObject,variableName,),java statements;,能够被处理的异常类名,必须是,Throwable,类的子类,被捕获异常的变量名称,可作为局部变量使用,当捕获到异常时执行的,java,语句。,12,上海财经大学 信息管理与工程学院,catch,语句块,执行完后,继续执行程序的后续代码(不中断),如果一个,Catch,语句针对某个叶节点,则是一种专用的异常处理。,通过上溯造型,,Catch,语句可以处理,Exception,类及其所有子类类型的异常。,13,上海财经大学 信息管理与工程学院,finally,语句块,一般用于关闭文件或释放其他系统资源,可以将控制转移到程序的其他地方。,finally,语句块无论是否发生异常都要执行。,finally,执行完后,继续执行程序的后续代码(不中断),例,6-1,finally,14,上海财经大学 信息管理与工程学院,1,try,2 /code that might throw a,partcular,exception,3 ,catch,(MyExceptionType,e),4 /code to execute if a,MyExceptionType,exception is thrown,5 ,catch,(Exception e),6 /code to execute if a general Exception exception is thrown,7 ,finally,try ,catch,和,finally,语句联用的结构,15,上海财经大学 信息管理与工程学院,try,catch,和,finally,语句小结,try catch()finally,之间不能有其它可执行代码存在;,当程序执行发生异常或遇到关键字,throw,时就抛出一个异常,将控制转移到相关的,catch,块中处理之,。,如果产生异常的方法本身没有相应,catch,语句,块,则应有,throws,语句声明异常,16,上海财经大学 信息管理与工程学院,public class HelloWorld,public static void,main(String,args,),int,i=0;,String greetings=Hello,World!,Hello!,HELLO,!;,while(i4),try,System.out.println(greetingsi,);,catch(ArrayIndexOutOfBoundsException,e),System.out.println(Re,-setting Index Value);,finally,System.out.println(This,is always printed);,i+;,/,在,Java,中有这样一个类,,java.lang.ArrayIndexOutOfBoundsException,Hello World!,This is always printed,Hello!,This is always printed,HELLO!,This is always printed,Re-setting Index Value,This is always printed,课堂练习:,捕获与处理异常示例,17,上海财经大学 信息管理与工程学院,多个异常的处理,可用一组并列的,catch,块处理多异常情况,try .,catch(,异常类1,e1),.,catch(,异常,类2,e2),.,.,匹配规则:,抛出对象与,catch,参数类型相同,抛出对象为,catch,参数类的子类,按先后顺序捕获(注意,catch,块书写时的,排列顺序:先具体、后一般;,先子类,后父类,),18,上海财经大学 信息管理与工程学院,public void,writeList,(),PrintWriter,out=null;,try,System.out.println(Entering,try statement);,out=new,PrintWriter,(new,FileWriter(OutFile.txt,);,for(,int,i=0;i=10,Closing,PrintWriter,Entering try statement,Closing,PrintWriter,20,上海财经大学 信息管理与工程学院,多种异常的同时处理:异常类的结构,21,上海财经大学 信息管理与工程学院,异常处理可以针对这个体系中的任意一个类。,叶结点:是具体、专用的异常处理;,中间结点:是通用的异常处理。可以处理,该结点及其子类类型,的异常。,例6-3中:,writeList,方法:,try,.,catch(Exception e),System.err.println(Exception,caught:+,e.getMessage,();,异常处理:通用性,22,上海财经大学 信息管理与工程学院,方式:可能产生异常的方法声明,它本身将不处理该异常,而该异常将被抛到,调用该方法的程序,。,例:,class A,public void troublesome(),throws,IOException,.,Class B,tryA.troublesome();,catch(,IOException,),异常处理抛出异常,23,上海财经大学 信息管理与工程学院,示例:,例6-2,public class,ListOfNumbers,public void,writeList,(),throws,IOException,ArrayIndex,Exception,/,被调用者,声明可能抛出的异常类型,printWriter,out=new,PrintWriter(new,FileWriter(OutFile.txt,),);,for(,int,i=0;i size;i+),out.println(Value,at:+i+=+,victor.elementAt(i,),);,out.close();,public class,TestOfDeclared,/,调用者,public static void main(String,args,),try,/,在调用者处进行异常处理,ListOfNumbersDeclared,list=new,ListOfNumbersDeclared,();,list.,writeList,(),;,catch(,Exception,e),;/,IOException,ArrayIndex,的父类,System.out.println(A,list of numbers is created);,24,上海财经大学 信息管理与工程学院,抛出异常的,throw,语句,:,throw,someThrowableObject,例如:,public Object pop(),throws,EmptyStackException,Object,obj,;,if(size=0)/,抛出异常的条件,throw,new,EmptyStackException,(),;,obj,=,objectAt(size,-1);,setObjectAt(size,-1,null);,size-;,return,obj,;,异常处理用,throw,抛出异常,注意区别,/,一旦出现异常,程序将不会执行后续代码,而转入调用者方法的,catch,语句组,25,上海财经大学 信息管理与工程学院,异常处理的关键字,Java,的异常处理是通过,5,个关键字来实现的:,try,,,catch,,,throw,,,throws,,,finally,。,Throws:Lists the exceptions a method could throw.,Throw:Transfers control of the method to the exception handler.,Try,:,Opening exception-handling statement.,Catch,:,Captures the exception.,Finally,:,Runs its code before terminating the program.,26,上海财经大学 信息管理与工程学院,异常处理的关键字,throws,总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常。对大多数,Exception,子类来说,,Java,编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是,Error,或,RuntimeException,,或它们的子类,这个规则不起作用,因为这在程序的正常部分中是不,期待,出现的。如果你想明确地抛出一个,RuntimeException,,你必须用,throws,语句来声明它的类型。,throw,总是出现在函数体中,用来抛出一个异常。程序会在,throw,语句后立即终止,它后面的语句执行不到,然后在包含它的所有,try,块中(可能在上层调用函数中)从里向外寻找含有与其匹配的,catch,子句的,try,块。,27,上海财经大学 信息管理与工程学院,抛出异常:上抛,如果一个异常在调用程序中未被处理,则该异常将被沿着方法调用关系继续上抛。,如果一个异常在返回到,main(),时还未被处理,则程序将非正常终止。,28,上海财经大学 信息管理与工程学院,自定义异常类,是,Exception,类的子类,可包含普通类的内容。,public class,ServerTimeOutException,extends,Exception,private String reason;,private,int,port;,public,ServerTimeOutException(String,reason,int,port),this.reason=reason;,this.port=port;,public String,getReason,(),return reason;,public,int,getPort,(),return port;,自定义异常:1.自定义异常类,29,上海财经大学 信息管理与工程学院,Public void,connectMe(String,serverName,),throws,ServerTimeOutException,int,success;,int,portToConnect,=80;,success=,open(serverName,portToConnect,);,if(success=,-1),throw,new,ServerTimedOutException,(,“Server not open”,80);,自定义异常:2.抛出产生的异常,30,上海财经大学 信息管理与工程学院,Public void,findServer,(),try,connectMe,(defaultServer,);,/,可能抛出异常的语句组,catch,(ServerTimeOutException,e),System.out.println(“Server,timed out,try another”);,try,/,注意:嵌套,try catch,connectMe,(alternateServer,);,catch,(ServerTimeOutException,e1),System.out.println(“No,server,avaliable,”);,自定义异常:3.获得异常并处理,31,上海财经大学 信息管理与工程学院,自定义异常:例,例6-6,32,上海财经大学 信息管理与工程学院,课下练习:上机实验,修改复数程序,主类中使用,args,命令行参数传入2个复数操作数和1个操作方法(加、减、乘),并编程实现自定义异常,Less,ParamException,(,操作数不足)与,NoOperationException,(,操作方法未知);,增加定义复数类的复数除方法,用,throws,声明抛出,DividedByZeroException,(,自定义异常,);在合适的位置处理这些异常。,33,上海财经大学 信息管理与工程学院,Q&A,多谢!,34,上海财经大学 信息管理与工程学院,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服