16Java例外处理_第1页
16Java例外处理_第2页
16Java例外处理_第3页
16Java例外处理_第4页
16Java例外处理_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、2009年浙江工业大学软件学院Java程序设计视频教程Java程序设计视频教程本讲主题:异常处理主讲教师:黄洪2主要内容主要内容o 异常的概念(Exceptions)o 异常处理o 自定义异常o 递归3引例1Public class HelloWorld2public static void main(String args )3int i=0;4String greetings = “Hello World!”,”Hello!”,5“HELLO WORLD!”;6while ( i4)7System.out.println(greetingsi);8i+;91011 Hello World!

2、Hello!HELLO WORLD ! !Java.lang.ArrayIndexOutOfBoundsExceptionat HelloWorld.main(HelloWorld.java:7)4Exception 的概念的概念o Exception(异常)就是导致程序运行时发生问题的各种情况。例如:n 试图打开的文件不存在n 网络链接中断n 操作数越界n 要加载的类不存在o Java中定义了各种异常5Java中定义的异常类及其继承结构中定义的异常类及其继承结构ThrowableErrorExceptionVirtualMachineErrorAWTErrorRuntimeException

3、IOExceptionEOFExceptionFileNotFoundExceptionArithmeticExceptionNullPointerException6异常的分类o Errorn很难恢复的严重错误,一般不由程序处理。很难恢复的严重错误,一般不由程序处理。o Exception可处理异常,可以由程序处理的异常,有很多类别,主要有可处理异常,可以由程序处理的异常,有很多类别,主要有nRuntimeExceptiono 运行时出现的异常,程序可不必检测。如数组越界等。运行时出现的异常,程序可不必检测。如数组越界等。nIOException输入输出异常。在设计输入输出的程序时,要经常用

4、到。输入输出异常。在设计输入输出的程序时,要经常用到。n其它异常其它异常通常是由环境因素引起的,并且可以被处理的。如文件不通常是由环境因素引起的,并且可以被处理的。如文件不存在,无效存在,无效URL等。等。7异常的产生o 异常的产生有两种情况n 由java虚拟机在执行程序时自动发现并产生。n 在程序中用throw命令产生。也称抛出异常o 所谓产生异常就是根据异常的类型,产生一个异常对象,“抛给”程序处理。因此,所有异常类都是Throwable类的子类。异常对象封装了异常的信息和一些相关的处理方法。8异常处理异常处理o 异常处理的两种方式异常处理的两种方式扑获并处理异常扑获并处理异常将方法中产生

5、的异常抛出将方法中产生的异常抛出9异常处理异常处理o 异常处理有两种方式n 扑获并处理异常在程序中用try-catch-finally结构处理异常。n 上交异常(转移异常)不处理发生的异常,而是将方法中产生的异常再抛出,交给调用该方法的上层方法处理。10示例:示例:TestException1.public class TestException 2.3. public static void main(String args)4. 5.int result=new Test().divide(3,0);6.System.out.println(“The result is “ + resul

6、t);7. 8. 9.class Test10. 11.public int divide(int x, int y)12. 13.return x/y;14. 15. 运行结果:Exception in thread main java.lang.ArithmeticException: / by zero at Test.divide(TestException.java:13) at TestException.main(TestException.java:5)11异常处理方式之一:异常处理方式之一:扑获并处理异常扑获并处理异常o trycatch语句语句 try 可能发生异常的可能发

7、生异常的java语句块语句块 catch(ExceptionType1 eVariableName1) 处理相应异常的处理相应异常的java语句块语句块catch(ExceptionType2 eVariableName2) 处理相应异常的处理相应异常的java语句块语句块 . finally 语句块语句块 try 语句块后语句块后catch语句语句块和块和finally语句块至少语句块至少要有一个。要有一个。当当try语句块中发生的异语句块中发生的异常与常与catch语句的异常类语句的异常类型匹配,控制转到相应型匹配,控制转到相应的的catch语句中。语句中。无论是否发生异常,无论是否发生异

8、常,finally语句块都会被执语句块都会被执行。行。try, catch, finally之间不之间不能插入其他语句。能插入其他语句。异常处理举例12public class TestException2 public static void main(String args) int result=new Test().divide(3,0);System.out.println(The result is + result); class Testpublic int divide(int x, int y)int z=0; try z=x/y;System.out.println (t

9、ry块中异常语句后的语句。);/return z; /即使try中有return语句,finally也会被执行。但finally块后面的语句不会执行 catch(ArithmeticException e) System.out.println(捕获了异常:+e.getMessage(); finally System.out.println(进入Finally语句块); System.out.println (try-catch-finally后的语句); / z=-10; return z; 13多种异常的通用处理多种异常的通用处理14多种异常的通用处理多种异常的通用处理o 异常处理可以针

10、对这个体系中的任意一个类。异常处理可以针对这个体系中的任意一个类。n叶结点:是具体、专用的异常处理;叶结点:是具体、专用的异常处理;n中间结点:是通用的异常处理。可以处理该结点及其子中间结点:是通用的异常处理。可以处理该结点及其子类类型的异常。类类型的异常。o 例:try . . . catch (Exception e) System.err.println(Exception caught: + e.getMessage();15通用异常处理示通用异常处理示例例/本例演示异常的父子类关系,注意父类异常的本例演示异常的父子类关系,注意父类异常的catch语句应该语句应该/放在其子类异常放在其

11、子类异常catch语句的后面,否则,其子类异常永远不会被捕获。语句的后面,否则,其子类异常永远不会被捕获。public class TestException4 public static void main(String args) try int a1=Integer.parseInt(args0); int a2=Integer.parseInt(args1); int result=a1/a2; System.out.println(The result is + result); catch(ArrayIndexOutOfBoundsException e) System.out.p

12、rintln(下标越界下标越界:+e.getMessage(); catch(ArithmeticException e) System.out.println(除数为零除数为零:+e.getMessage(); catch(Exception e) /若若Exception的子类被捕获,则的子类被捕获,则Exception不再会被捕获不再会被捕获 System.out.println(捕获了异常捕获了异常:+e.getMessage(); finally System.out.println(进入进入Finally语句块语句块); 16异常处理方式之二:上传异常异常处理方式之二:上传异常o

13、将方法可能产生的异常抛出,表明该方法将不处理将方法可能产生的异常抛出,表明该方法将不处理该异常,调用该方法的上层方法将负责处理异常,该异常,调用该方法的上层方法将负责处理异常,或者再将异常上传。(类似于将麻烦传给上级)或者再将异常上传。(类似于将麻烦传给上级)public void troublesome( ) throws IOException .o 如果一个例外在返回到如果一个例外在返回到main()(国务院)时还未(国务院)时还未被处理,则程序将非正常终止。被处理,则程序将非正常终止。17抛出异常示例/本例演示抛出异常。一段调用抛出了异常的方法的程序,必须对异常进行处理/或者再将异常抛

14、出,否则不能通过编译。public class TestException5 public static void main(String args) / throws Exception int result=new Test().divide(3,0); System.out.println(The result is + result); class Testpublic int divide(int x, int y) throws Exception return x/y; 18o抛出异常使用抛出异常使用throw语句,格式如下:语句,格式如下:throw someThrowable

15、Object例:例:public Object pop() throws EmptyStackException Object obj; if (size = 0) throw new EmptyStackException(); obj = objectAt(size - 1); setObjectAt(size - 1, null); size-; return obj;抛出异常抛出异常19自定义异常自定义异常我们可以自己定义异常类我们可以自己定义异常类,自定义异常类是自定义异常类是Exception类类的子类的子类,可包含普通类的内容。可包含普通类的内容。例:例:class Divide

16、ByMinusException extends Exceptionint divisor;public DivideByMinusException (String msg, int divisor)super(msg);this.divisor = divisor;public int getDivisor()return divisor;20抛出产生的异常抛出产生的异常class Test public int divide(int x, int y) throws DivideByMinusException if (y0) throw new DivideByMinusExcepti

17、on(除数也不能为负数!除数也不能为负数!,y); int result= x/y; System.out.println(in devide!); return result; 21捕获异常并处理捕获异常并处理public class TestDefineException public static void main(String args) try int result=new Test().divide(3,0); System.out.println(The result is + result); catch(DivideByMinusException e) System.out.println(除数为负除数为负:+e.getMessage(); e.printStackTrace(); catch(ArithmeticException e) System.out.println(捕获了

温馨提示

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

评论

0/150

提交评论