scjp培训第七章java异常_第1页
scjp培训第七章java异常_第2页
scjp培训第七章java异常_第3页
scjp培训第七章java异常_第4页
scjp培训第七章java异常_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、B茨第七章异常木模块讲述建立在Jas编程语言中的错误处理装S。GttgsnuaTwJavB Progemrrdng Language Basia jU邨ja-efiukCG丄帘019參54novOontsod舅詳內IfObject-Odented ProgrammingEx8p创on HandlingDwelo ping (Graphical Us&r IniBitacesWAWT1WAWTniFoEiidaCioo t1 CocApcAcri Ubocyeb»EApplets8 叶MultrthreadingIOommynioationwStUVAlO54皿,第一节相关问题

2、讨论一下述问题与木模块中的材料相关:在大部分編程语肓中,如何解决运行时错谋?第二节目的木模块学习结束后.能勺头定义界常 使用 try, catch 和 finally 语句 描述界常分类 开发程序來处理自己的片常第三节异常界常类定义程序所遇到的轻微错误发生下列情况时会出现界常:想打开的文件不存在网络连接中I析受控操作数超出预定范困非常as兴趣地正在装敘的类文件丢失错溟类定义严重的错误条件7J.1介绍什么是界常?在Java编程语言中并常类定义程序中可能遇到的轻微的错误条件。可以写代码來处理界常并继续程 序执行.而不是让程序中断。在程序执行中.任何中断正常程序流程的界常条件就是错误或界常C例如发生

3、下列情况时会岀现界常:想打开的文件不存在 网络连接中断 受控操作数超出预定范碉 非常感兴趣地正在装载的类文件丢失在Java编程语言中.错误类定义被认为是不能恢复的严重错误条件。在大多数情况下,出遇到这样的错误时.建议 址程序中断。Java编程语言实现Or#常來帮助建立弹性代码。在程序中发生错误时.发现错误的方法能抛出一个异常到其调用 程序,发出已经发生问题的信号。然后.调用方法捕获抛出的界常.在可能时再恢复回來。这个方案给程序员一个写 处理程序的选择.来处理界常通过浏览API.可以决定方法抛出的是什么样的异常。73.2实例考虑一下HelioWorld, java程序版木的简爪扩展,它通过信息來

4、循环:1.2.public class HelloWorld public static void main (String args() (3.int. 1 = 0;4.5.String greetings = 6.''Helloworld!".7-'No, Imean it!"8."HELLOWORLD!"9.10.11.while (1< 4)(12.System.out.println (greetings i);13.if14.15.16.正常情况下.艸界常被抛出时.在其循环被执行四次之后.程序终止,并帯有错误信息

5、,就欽前浙所示的程序那样.1.C:student> Java HelloWorld2.Helloworld!3.No, Imean it!4.HELLOWORLD!B茨5.3 avalangArraylndexOutOfBoundsException: 36.at HelloWcrld.main(HelloWorld.Java:12)异常处理允许程序捕获界常,处理它们.然后继续程序执行。它是分层把关 W此,错误情况不会介入到程序的正常流程中。特殊情况发生时,在与正常执行的代码分离的代码块中被处理。这就产生了21易识别和管理的代码。第四节异常处理Java编程语育提供了一个來考虏哪个界常被抛

6、出以及如何來恢复它的机制。 7<4.1 try 和 catch 语句try和catch语句1. .6.7-try (/ code that might throw a particular exception catch (MyExceptlonType e)(/ code to execute if a MyExceptlonType exception is thrown catch (Exception e) / code to execute if a general Exception exception is throtvn要处理特殊的界常将能够抛出界常的代码放

7、入nry块中,然后创建相应的catch块的列表,毎个可以被抛出异常都冇一个。如果生成的界常H catch中提到的相匹配那么catch条件的块语句就被执行-在try块之后.可能有许多catch块每一个都处理不同的并常。1.try 2./ code that might threw a particular exception3. catch (MyExceptionType e 4./ code to execute xf a MyExceptionType exception is thrown5. catch (Exception e) (6./ code to execute if a g

8、eneral Exception exception is thrown7.74.2调用栈机制如果方法中的一个语句抛出一个没有在相应的try/catch块中处理的界常,那么这个界常就被抛出到调用方法中。如果并常也没有在调用方法中被处理,它就被抛出到该方法的调用程序。这个过程要一直延续到并常被处理。如果并常到这时还没被处理,它便回到mainO.而且,即使mainO不处理它,那么.该界常就并常地中斷程序。考虑这样一种情况在该情况中mainO方法诡用另一个方法(比如,first()然后它调用另一个(比如.secondO)o如果在second0中发生异常,那么必须做一个检査來看看该片常是否有一个cat

9、ch:如果没有那么对调用栈(firstO )中的下一个方法进行检査.然后检査下一个(mainO) °如果这个异常在该谓用栈上没有被最后一个方法处理.那么就会发生一个运行时错渓,程序终止执行74.3 Hnally 语句finally 语句1.try 2.startFaucet.();3.waterLawn ();4.5.finally 6.3topFaucet );7.)豪祥內ffB茨final 1 y语句定义一个总是执行的代码块,而不考虏异常是否被捕获。下述样板代码來Frank Yellin弗兰克叶林的白皮书(Java中的低级安全:1.try 2.startFaucet ();3.w

10、aterLawn ();4.5.finally 6.stopFaucet ();17.1.舅詳內If7.在前面的例子巾,即使界常在扑开开关或给草地浇水时发生.开关也能被关掉。try后面的括号中的代码被称做保 护码。如果终止程序的System. exitO方法在保护码内被执行,那么这是final 1 y语句不被执行的唯一情况。这就暗示.控制流程能偏离正常执行顺序比如,如果一个return语句被嵌入try块内的代码中.那么.finally块中的代码应在 return前执行7<4.4靈访前例下面的例子是第169贞mainO方法的重弓。本程序以前的版木中产生的异常被捕获.数组索引重新设定使下述程

11、1.序继续运行public static void main (String args) (2.int 1=0;3.String greetings (4.“Helloworld!",5.'No, Imean it!"6.'HELLOWORLD!"7.8.while (i< 4) 9.try (10.System.out.printin (greetingsi);11. catch (ArraylndexOutOfBoundsException ej12.System, out .printin ( '*Re-3etting Inde

12、x Value");13.i = -114. finally 15.18. / end while()19. / end main(JSystem, out .printin ('"This is always printed'*);16.沟循环被执行时,下述在屏幕上出现的信息将改变 Helle world!B茨第五节异常分类在Jas编程语肓中异常有三种分类。Java. lang. Throwable类充十所有对盘的父类,可以使用界常处理机制将这些对欽抛出并捕获。在Throwable类中定义方法來险索与并常相关的错误信息并打印显示界常发生的栈跟踪信息。它有E

13、itx III Exception两个基木子类如下图所示: VirtualMachineErrorIError_ AWTErrorThrowableExceptionOutOfmorr ro rStadcOve rf lowEr ro iI AritiuiticExceptionNuXlPointerE?ceptioiJideKOutOfBoxmds ExceptionI EOFException lOExction Fl lotF oundExc ep tionThrcwable 不能使川,而使用子类异常中的一个來描述任何特殊界常。每个并常的目的描述如下:Erx表示恢复不是不可能但很困难的情

14、况下的一种严重问题C比如说内存溢出。不可能指望程序能处理这样的情况。RuntimeException表示一种设讣或实现问题。也就是说,它表示如果程序运行正常.从不会发生的情况。比如.如果数组索引扩展不超出数组界限,那么 ArraylndexOutOfBoundsException 常从不会拋出。比如这也适用于取消引用一个空值对欽变fi。W为一个正确设il和实现的程序从不出现这种开常,通常对它不做处理。这会导致一个运行时信息应确保能采取搭施更正问题.而不是将它藏到谁也不注堂的地方。其它界常表示一种运行时的困难它通常由坏境效果引起,可以进行处理。例子包据文件未找到或无效URL界常(用户打了一个错谋

15、的URL) 如果用户谋打了什么东西,两看都容易出现。这两者都可能W为用户错误而出现这就鼓励程序员去处理它们。第六节共同异常共同异常2.This is always printed3.No, I mean it!4.This id always printed5.HELLO WORLD!6.This id always printed7.Re-setting Index Value8.This id always printedArithmeticExceptionXullPointerExceptionNegat iveArraySizeExcept ionArraylndexoutofBou

16、ndsEsceptionSecurityExceptionJava编程语言提供几种预定义的片常e下面是可能遇到的更具共同性的界常中的几种:ArithmeticException 整数被0除运算得出的结果。int I =12 / 0:XullPointerException'1对欽没被实例化时.访问对象的属性或方法的尝试:Dale d= null;Sysienrout.primliKd.loStringO):Negat i veArraySizeExcept ion创建帶负维数大小的数组的尝试。ArraylndexoutofBoundsEsception访问超过数组大小范I科的一个元素的

17、尝试。SecurityException 典型地被抛出到浏览器中,SecurityManager类将抛出applets的一个异常该界常企图 做下述工作(除非明显地得到允许八访问一个木地文件 打开主机的一个socket.这个主机与服务于applet的主机不是同一个 在运行时环境中执行另一个程序第七节处理或声明规则处理或声明规则用try-catch-f inally块來处理界常使用throws子句声明代码能引起一个界常为r写出健壮的代码Java編程语言嬰求,为一个方法在栈(即,它已经被训用)上发生Exception (它Error 或Runt imeException不同)时.那么,该方法必须决定

18、如果出现问题该采取什么描施。程序员可以做满足该要求的两件事:第一.通过将Try ) catch ()()块纳入其代码中在这里捕获给被命名为属于某个超类的界常,并调用方法处 理它。即使catch块是空的,这也算是处理情况。第一.让被调用的方法表示它将不处理界常.而且该界常将被抛回到它所遇到的调用方法中。它是按如下所示通过用 throws子句标记的该调用方法的声明來实现的:public void troublesome() throws lOEzception关键字throws之后是所有界常的列表方法可以抛回到它的调用程序中。尽管这里只显示了一个界常.如果有成倍 的可能的异常可以通过该方法被抛出,

19、那么.可以使用逗号分开的列表。是选择处理还是选择声明一个异常取决于是否给你自己或你的调用程序一个更合适的候选的办法來处理界常。注一由于异常类象其它类一样破组编到层次中,而且由于无论何时想要使用超类都必须使用子类,因此,可以捕 获异常J.组"并以相同的捕获代码来处理它们。例如,尽管lOExcept ions (EOFExcept ion, Fi I eNotFoundExcept ion 等等有几种不同的类型,通过俘获lOException,也可以捕获lOException任何子类的实例。第八节创建自己的异常7.8J介绍用户定义界常差通过扩展Exception类來创建的。这种界常类可以

20、包含一个“普通”类所包含的任何东西。下面就1.是一个川户定义界常类例子,它包含一个构造函数、几个变g以及方法:public class ServerTimedOutException extends Exception 2.private String reason;3.private int port;豪祥內ff4.5.thisreason=reason;6.this.port =port;7.8.publicStringgetReason() 9.returnreason;10.11.publicint getPort( 12.return port;public ServerTimedO

21、utExceptlcn (String reason,xnt port)13.14.使用语句來拋出已经创建的界常: throw new ServerTimedOutException (''Could not connect", 80);782实例考虑一个客户服务器程序。在客户代码中要与服务器连接并希望服务器在5秒钟内响应。如果月艮务器没有响应.1.那么,代码就如下所述抛出一个异常(如一个用户定义的Server!imedOutException)。public void connectMe(String serverNatne) throwsServerTimedOu

22、tException 2.int success;3.int portToConnect = 80;4.5.if (success = -1)6.throw new ServerTimedOutException(7.''Could not connect, 80);8.9.要捕获界常,使川try语句:1.public void flndServer() success = open(serverName portToConnectJ;3.try 4.connectMe(defaultserver);5. catch(ServerTimedOutException e) 6.System.out.printin("Server timed out, trying alternate");7.try 8.con

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论