Java程序设计(六)_第1页
Java程序设计(六)_第2页
Java程序设计(六)_第3页
Java程序设计(六)_第4页
Java程序设计(六)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、山东科技大学信息科学与工程学院2n异常产生异常产生n异常处理异常处理n自定义异常类型自定义异常类型主要内容3异常及其种类(1)n 什么是异常什么是异常( Exception )?n 程序开发和运行过程中会出现程序开发和运行过程中会出现编译错误编译错误和和运行错误运行错误。n 编译错误容易被发现并排除,而运行错误(编译错误容易被发现并排除,而运行错误(逻辑错误逻辑错误和和异异常常)很难预料。因此为了程序的稳定性和可靠性,就需要对)很难预料。因此为了程序的稳定性和可靠性,就需要对程序异常处理和保护。程序异常处理和保护。n 异常异常( Exception ):正常程序流程所不能处理或者没有处正常程序

2、流程所不能处理或者没有处理的异常情况或异常事件理的异常情况或异常事件。4异常及其种类(2)n 为什么要使用异常?为什么要使用异常?n 传统程序设计中用如下伪代码方法来检查和处理程序错误执行一个任务执行一个任务if 前一个任务未能正确执行前一个任务未能正确执行 执行错误处理执行错误处理执行下一个任务执行下一个任务if 前一个任务未能正确执行前一个任务未能正确执行 执行错误处理执行错误处理这样会导致程序结构复杂!这样会导致程序结构复杂!5异常及其种类(3)n 常见异常常见异常n 内存耗尽n 数组下标越界n 除数为0n 非法的参数(方法的参数)6异常及其种类(4)n 异常分类异常分类 n 根据异常在

3、编译时是否被检测来分,异常可以分为两类:受检异受检异常常(Checked Exception)与非受检异常非受检异常(Unchecked Exception)。 n 非受检异常不能在编译时检测到非受检异常不能在编译时检测到。非受检异常包括运行时异非受检异常包括运行时异常常(Runtime Exception)和错误和错误(Error)。n 错误错误指的是致命性错误,常常无法处理。n 根据异常的严重性,可以分为可以处理的异常可以处理的异常和错误异常错误异常。n 异常以类的形式封装。程序可以处理的异常可以处理的异常对应的类是java.lang.Exception及其子类。n 运行时异常运行时异常对

4、应的类是java.lang.RuntimeException。n 错误异常错误异常对应的类是java.lang.Error。7异常及其种类(5)n 异常相关类的继承关系图异常相关类的继承关系图 8异常及其种类(6)n 除数为除数为0的异常例程的异常例程(J_ExceptionByZero.java, p175)public class J_ExceptionByZero public static void main(String args ) int a= 10; int b = 0; System.out.println(a= + a); System.out.println(b= + b

5、); System.out.println(a/b= + a/b); / 方法方法main结束结束 / 类类J_ExceptionByZero结束结束运行报错:运行报错:Exception in thread main java.lang.ArithmeticException: / by zero9n异常及其种类异常及其种类n异常处理异常处理n自定义异常类型自定义异常类型异常处理10异常产生n 异常的产生有两种:异常的产生有两种:n 可以由可以由Java虚拟机在执行程序时自动发现并产生异常虚拟机在执行程序时自动发现并产生异常。n 也可以在程序中显式地生成异常也可以在程序中显式地生成异常,这种

6、方法称为抛出异常抛出异常(Throw Exceptions)。抛出异常采用throw语句,格式如下:throw java.lang.Throwable类型的变量类型的变量;throw new ArithmeticException( );或或ArithmeticException e=new ArithmeticException( );throw e;throw new String(“Exception”);11n异常及其种类异常及其种类n异常产生异常产生n自定义异常类型自定义异常类型异常处理12异常处理(1)n 异常的处理方法有两种:异常的处理方法有两种:捕捉异常捕捉异常和转移异常。和转

7、移异常。n 捕捉异常捕捉异常(Catch Exception)通过通过trycatchfinally语句实现,具语句实现,具体格式如下体格式如下:try 可能产生异常的语句序列可能产生异常的语句序列catch( Exception1 e1) 语句序列语句序列; catch( ExceptionN eN) 语句序列语句序列;finally 语句序列语句序列;说明:说明:1)catch语句块语句块可以有多个可以有多个;2)catch语句块和语句块和finally语句块语句块可以可以同时存在,也同时存在,也可以只有其一可以只有其一;3)如果发生异常,则会跳转到捕捉)如果发生异常,则会跳转到捕捉对应异

8、常的对应异常的catch语句块,语句块,发生异常发生异常语句之后的语句序列不会被执行语句之后的语句序列不会被执行。4)不管异常是否发生,不管异常是否发生,finally语句语句块总是会被执行块总是会被执行,除非碰到强制退除非碰到强制退出程序的出程序的System.exit(0)语句语句;5)如果)如果try语句块或语句块或catch语句块中语句块中有有return语句,则会执行完语句,则会执行完finally语语句块再执行返回。句块再执行返回。13异常处理(2)n 异常捕捉例程异常捕捉例程(J_ExceptionCatch.java, P179)public class J_Exception

9、Catch public static void main(String args ) try System.out.println(try语句块语句块); throw new Exception( ); catch(Exception e) System.err.println(catch语句块语句块); e.printStackTrace( ); finally System.out.println(finally语句块语句块); / try-catch-finally结构结束结构结束 / 方法方法main结束结束 / 类类J_ExceptionCatch结束结束说明:说明: printS

10、tackTrace()方法的方法的功能是通过标准错误输出流功能是通过标准错误输出流在控制台窗口输出异常的类在控制台窗口输出异常的类型以及异常发生的方法调用型以及异常发生的方法调用堆栈跟踪信息堆栈跟踪信息。14异常处理(3)n 异常的处理方法有两种:捕捉异常和异常的处理方法有两种:捕捉异常和转移异常转移异常。n 转移异常是转移异常是通过把可能发生的通过把可能发生的受检异常受检异常转移到转移到调用该成员方法调用该成员方法的的上层方法上层方法处处。转移异常的格式如下:。转移异常的格式如下:方法修饰词列表方法修饰词列表 返回类型返回类型 方法名方法名(方法的参数列表方法的参数列表) throws 异常

11、类型列表异常类型列表 方法体方法体说明:说明:1)异常类型列表可以有多个异常类型,用逗号分隔;)异常类型列表可以有多个异常类型,用逗号分隔;2)要调用声明了转移异常的成员方法,则)要调用声明了转移异常的成员方法,则在上层方法必须捕捉该异在上层方法必须捕捉该异常常或或将该异常继续向更高的上层转移将该异常继续向更高的上层转移。15异常处理(4)n 转移异常例程转移异常例程( J_Exception.java, P180 )。public class J_Exception public static void mb_throwException( ) System.out.println(产生并抛

12、出产生并抛出ArithmeticException类型的异常类型的异常); throw new ArithmeticException( ); / 方法方法mb_throwException结束结束 public static void mb_catchArrayException( ) try mb_throwException( ); System.out.println(在在try语句块中的多余语句语句块中的多余语句); catch(ArrayIndexOutOfBoundsException e) System.err.println(方法方法mb_catchArrayExceptio

13、n捕捉到异常捕捉到异常); finally System.out.println( 方法方法mb_catchArrayException的的finally语句块语句块); / try-catch-finally结构结束结构结束 System.out.println(方法方法mb_catchArrayException运行结束运行结束); / 方法方法mb_catchArrayException结束结束public static void main(String args ) try mb_catchArrayException( ); catch(ArithmeticException e)

14、System.err.println(方法方法main捕捉到异常捕捉到异常); finally System.out.println(方法方法main的的finally语句块语句块); / try-catch-finally结构结束结构结束 System.out.println(异常处理结束异常处理结束); / 方法方法main结束结束 / 类类J_Exception结束结束此处不是受检异常,所以不必此处不是受检异常,所以不必在在mb_catchArrayException方方法中使用法中使用throws转移异常转移异常16n异常及其种类异常及其种类n异常产生异常产生n异常处理异常处理异常处理

15、17自定义异常类型n 自定义异常是指编写自定义异常是指编写java.lang.Exception类的子类,自定义异常类的类的子类,自定义异常类的使用与其他异常一样使用与其他异常一样(J_ExceptionNewExample.java, P182)。class J_ExceptionNew extends Exception private static int m_number = 0; public J_ExceptionNew( ) m_number +; / J_ExceptionNew构造方法结束构造方法结束 public String toString( ) return(新异常出现新异常出现 + m_number + 次次); / 方法方法toString结束结束 / 类类J_ExceptionNew结束结束public class J_ExceptionNewExample public static void main(String args ) try throw new J_ExceptionNew( ); catch(J_ExceptionNew e) System.err.println(e); / try-catch结构结束结构结束 / 方法方法main结束结束 / 类类J_ExceptionN

温馨提示

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

评论

0/150

提交评论