Java程序设计项目化教程-5.3.2异常脚本_第1页
Java程序设计项目化教程-5.3.2异常脚本_第2页
Java程序设计项目化教程-5.3.2异常脚本_第3页
Java程序设计项目化教程-5.3.2异常脚本_第4页
Java程序设计项目化教程-5.3.2异常脚本_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

PART5.3.2异常5.3.2异常引起程序中断,影响程序正常运行的事件称为异常。异常处理是使程序从故障中恢复,它包括提示异常信息、不产生无效结果和释放资源三方面内容。其中,显示异常信息和不产生无效结果可通过try和catch块来实现,释放资源可通过finally实现。5.3.2异常1.异常概述Java语言采用面向对象的方法来处理异常。Java程序在运行过程中,如果发生一个可识别的运行错误,系统应产生一个相应的异常类对象,并进一步寻找异常处理代码来处理它,确保程序能从故障中恢复,使程序能正常运行下去,直到结束。5.3.2异常(1)异常的概念在程序运行过程中发生的、会中断程序正常执行的事件称为异常(Exception),也称为例外。5.3.2异常常见的异常包括数组下标越界、除数为零、内存溢出、文件找不到、方法参数无效等。这些异常事件发生后,会导致程序中断,使程序无法或不能正常运行下去,出现返回错误的运行结果、死循环、死机、莫名其妙的终止等现象。5.3.2异常Java语言对异常事件进行分类,定义了很多异常类。每个异常类代表一个运行错误,并且它也包含了该运行错误的信息和处理错误的方法等内容。这样,可以利用类的层次性把多个具有相同父类的异常统一处理,也可以区分不同的异常分别处理,使用非常灵活。5.3.2异常例5-16除数为0的异常packagechapter5;publicclassexample5_16{ staticvoidmethod(){intx=0,z=10;inty=10/x;//x=0,除数为05.3.2异常5.3.2异常System.out.println("z="+z);}publicstaticvoidmain(String[]args){method();System.out.println("Aftermethod.");}}程序运行结果:注意:每个线程都有一个独立的方法调用栈。应用程序的主线程是调用main()方法的线程。5.3.2异常(2)异常处理机制在Java语言中,方法的调用过程记录在Java虚拟机的方法调用栈中。该堆栈保存了每个调用方法的本地信息(如方法的局部变量)。对于java应用程序的主线程,堆栈的底层是程序的入口方法main()。每当一个新方法被调用时,Java虚拟机把描述该方法的栈结构置入栈顶,这样,位于栈顶的方法为正在执行的方法。当一个方法正常执行完毕后,Java虚拟机会从调用栈中弹出该方法的栈结构,然后继续处理前一个方法。如果在执行方法的过程中抛出异常,则Java虚拟机必须找到能处理异常的catch代码块。它首先检查当前方法是否存在这样的catch代码块,如果存在,那么就执行该catch代码块;否则,Java虚拟机会从调用栈中弹出该方法的栈结构,继续到前一个方法中查找合适的catch代码块。5.3.2异常5.3.2异常调用异常对象d的printStackTrace()方法,打印来自方法调用栈的异常信息。5.3.2异常如果该线程不是主线程,那么终止这个线程,其他线程继续正常运行。5.3.2异常2.异常的分类Java语言中,所有的异常类都是内置类Throwable的子类,所以Throwable在异常类型层次结构的顶部。Throwable有两个子类,这两个子类把异常分成两个不同的分支:一个是Error,另一个是Exception5.3.2异常分支Error定义了Java程序程序运行时的内部错误。通常用Error类来指明与运行环境相关的错误。应用程序不应该抛出这类异常,发生这类异常时通常是无法处理的。分支Exception用于程序中应该捕获的异常。Exception下的异常主要分为两类:非检查型异常和检查型异常。Java语言的java.lang包中定义的非检查型异常列举于表5-1所示。表5-2列出了Java语言中定义的必须在方法的throw列表中包括的检查型异常。5.3.2异常5.3.2异常3.异常的处理对于检查型异常,Java语言强迫程序必须进行处理。处理方法有以下两种。捕获异常:使用try{}catch(){}finally{}块,捕获到所发生的异常,并进行相应的处理。5.3.2异常3.异常的处理对于检查型异常,Java语言强迫程序必须进行处理。处理方法有以下两种。声明抛出异常:不在当前方法内处理异常,而是把异常抛出到调用方法中。5.3.2异常(1)捕获异常在Java语言中对异常的处理主要有两种:一种是用try···catch···finally语句块来捕获处理异常;另一种是通过throws或throw关键字来抛出异常。下面首先来学习第一种处理方式。Java语言中严格规定了该语句块的语法格式;5.3.2异常try{//可能出现异常代码

}catch(异常类型1异常对象){//对异常1的处理

}5.3.2异常catch(异常类型2异常对象){//对异常2的处理}︙catch(异常对象n异常对象){//异常对象n的处理}finally{//不管有没有异常总会执行的代码}在程序中,duk对象调用的方法是被子类重写过的方法。子类对象向上转型为父类对象时不需要显示转换,而父类对象转换为子类对象时,需要显式强制类型转换。5.3.2异常catch(异常类型2异常对象){//对异常2的处理}︙catch(异常对象n异常对象){//异常对象n的处理}finally{//不管有没有异常总会执行的代码}在try···catch语句中捕获并处理异常,把可能出现异常的语句放入try语句块中,紧接在try语句块后的是各个异常的处理模块。try语句块只能有一个,而catch则可以有多个,catch必须紧跟try语句后,中间不能有其他的任何代码。一般情况下finally语句块一般放在最后一个catch语句块后,不管程序是否抛出异常,都会执行它。5.3.2异常例5-18异常处理

packagechapter5;publicclassexample5_18{ publicstaticvoidmain(String[]args) { Stringstr=null; intstrLength=0; try { strLength=str.length(); System.out.println("出现异常语句之后");5.3.2异常 } catch(NullPointerExceptione) { e.printStackTrace(); } finally { System.out.println("执行finally语句块"); } System.out.println("程序退出"); }}程序运行结果:5.3.2异常(2)抛出异常有一种说法是,最好的异常处理是什么都不做。这样说并不是任由系统自己处理出现的错误,而是说把出现的异常留给用户自己处理。例如,写一个方法,这个方法有抛出异常的可能性,最好的办法是把对异常的处理工作留给方法的调用者,因此需要在方法中定义要抛出的异常。5.3.2异常通过throws抛出异常。Java语言中是使用throws关键字抛出异常。修饰符返回值类型方法名()throws异常类型1,异常类型2{//方法体

}5.3.2异常用throw关键字再次抛出异常。th

温馨提示

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

评论

0/150

提交评论