ChapterJAVA的异常处理机制.ppt_第1页
ChapterJAVA的异常处理机制.ppt_第2页
ChapterJAVA的异常处理机制.ppt_第3页
ChapterJAVA的异常处理机制.ppt_第4页
ChapterJAVA的异常处理机制.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1,1,第6章 Java的异常处理机制,主要解决的问题: 1、什么是错误与异常? 2、造成Java异常的原因 3、什么是抛出?什么是捕获? 4、Java有哪些异常对象? 5、在程序中使用什么语句结构来处理异常? 6、能否自己创建异常对象?,2,2,本章主要内容,1.什么是异常处理机制 2.异常类的层次结构 3.异常的处理,3,3,异常示例,public class ExTest public static void main(String args) String friend=“lisa“,“bily“,“mary“; for (int i=0;i5;i+ ) System.out.println(friendi); System.out.println(“n the end!“); ,4,4,public class ExTest public static void main(String args) String friend=“lisa“,“bily“,“mary“; try for (int i=0;i5;i+ ) System.out.println(friendi); catch (IndexOutOfBoundsException e) System.out.println(“数组越界,溢出!“); System.out.println(“n the end!“); ,5,5,import java.io.*; public class EX_1 public static void main(String args) throws IOException String number_ch; int num; double total=3.25; System.out.println(“有多少个盒子?“); BufferedReader in=new BufferedReader(new InputStreamReader(System.in); number_ch=in.readLine(); num=Integer.parseInt(number_ch); System.out.println(“fgfg:“+total*num); ,6,6,异常,异常:是在程序运行过程中发生的异常事件。如:除0溢出、数组越界、文件找不到等。,7,7,6.1 什么是异常处理机制,Java的异常处理机制是用来处理程序运行时的错误的有效机制,以往需要由程序员完成的程序出错情况的判别,在Java中改为由系统承担。通过系统抛出的异常,程序可以很容易地捕获并处理发生的异常情况。,8,8,6.1.1 什么是错误与异常,根据错误的性质将运行错误分为两种类型: 1Error错误:表示恢复很困难的情况下的一种严重问题。如内存溢出。不可能指望程序处理。 处理方法:不应该抛出异常。让程序中断。 2Exception异常:表示一种设计或实现问题,如对负数开平方根、空指针访问等。 处理方法:编写代码来处理异常并继续程序执行,而不是让程序中断。-是程序员的责任,9,9,6.1.2 异常发生的原因,异常发生的原因有以下三种: 1Java 虚拟机检测到了非正常的执行状态 2Java程序代码中的throw语句被执行。 3异步异常发生。,10,10,6.1.3 如何处理异常,Java的异常处理机制分为两个步骤: 1抛出异常 Java规定:当语义限制被违反时,将会抛出(throw)异常,即产生一个异常事件,生成一个异常对象,并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常。 2捕获异常 异常抛出后,运行时系统从生成异常对象的代码开始,沿方法的调用栈进行查找,直到找到包含相应处理的方法代码,并把异常对象交给该方法,称为捕获(catch)异常。,11,11,抛出异常,如果一个方法中的一个语句会产生一个没有在相应的try/catch块中处理的异常,那么该方法中止执行并将异常抛出到该方法的调用程序中。这个过程要一直延续到异常被处理。 如果一直到main()中仍没有被处理,那么该异常就中断程序的执行。,12,12,13,13,6.2 异常类的层次结构,Java中的异常类具有层次结构组织。 如图所示。,14,14,6.2.1. Exception异常类的子类,(1)RuntimeException运行时异常类 (2)NoSuchMethodException方法未找到异常 (3)java.awt.AWTException图形界面异常类 (4)java.io.IOException输入输出异常类 (5)Exception异常类的其它子类,15,15,(1)RuntimeException类主要包括以下异常子类:,ArithmeticException算术异常类; ArrayStoreException数组下标越界异常类; ClassCastException类型强制转换异常类; IndexOutOfBoundsException下标越界异常类; NullPointerException空指针异常类; SecurityException违背安全原则异常类。,16,16,(2)java.io.IOException类的子类有:,IOException:申请I/O操作没有正常完成。 EOFException:在输入操作正常结束前遇到了文件结束符。 FileNotFoundException:在文件系统中,没有找到由文件名字符串指定的文件。,17,17,(3)Exception异常类的其它子类:,EmptyStackException; NoSuchFieldException; NoSuchMethodException; ClassNotFoundException; CloneNotSupportedException; IllegalAccessException; InstantiationException; InterruptedException。,18,18,6.2.2 Error错误类的子类,(1)VirtualMachineError虚拟机错误 OutOfMemoryError内存溢出错误 StackOverflowError栈溢出错误 (2)LinkageError链接错误 (3)NoClassDefNotFoundError类定义未找到错误 (4)java.awt.AWTError图形界面错误,19,19,6.3 异常的处理,异常处理语句格式为: try / 被监视的代码段,一旦发生异常,则交由其后的catch代码段处理 catch (异常类型 e) / 要处理的第一种异常 catch (异常类型 e) / 要处理的第二种异常 finally / 最终处理,20,20,public class ExTest public static void main(String args) String friend=“lisa“,“bily“,“mary“; try for (int i=0;i5;i+ ) System.out.println(friendi); catch (java.lang.ArrayIndexOutOfBoundsException e) System.out.println(“index error“); System.out.println(“n the end!“); ,21,21,例6.1 使用 trycatch语句处理异常的过程。运行结果如图所示:,22,22,public class TC1 public static void main(String arg3) System.out.println(“这是一个异常处理的例子n“); try int i=10; i /=0; catch (ArithmeticException e) System.out.println(“异常是:“+e.getMessage(); finally System.out.println(“finally 语句被执行“); ,23,23,例6.2 catch语句中声明的异常类型不匹配的情况。,public class TC2 public static void main(String args) System.out.println(“这是一个异常处理的例子n”); try int i=10; i /=0; catch (IndexOutOfBoundsException e) System.out.println(“异常是:“+e.getMessage(); finally System.out.println(“finally 语句被执行“); ,24,24,例6.3 多个catch子句的异常处理。运行结果如图所示。,25,25,public class TC3 public static void main(String args) try int a=args.length; System.out.println(“na = “+a); int b=42/a; int c=1; c42=99; ,26,26,catch (ArithmeticException e) System.out.println(“发生了被 0 除:“+e); catch (ArrayIndexOutOfBoundsException e) System.out.println(“数组下标越界:“+e); ,27,27,6.3.2 throw语句,throw语句格式为: ; 程序会在throw语句处立即终止,转向trycatch寻找异常处理方法,不再执行throw后面的语句。下面的例子中使用了throw语句主动抛出一个异常。,28,28,例6.4 throw语句的使用,运行结果如图所示。,29,29,public class TC5 static void throwProcess() try throw new NullPointerException(“空指针异常“); catch (NullPointerException e) System.out.println(“n在 throwProcess 方法中捕获一个“+e.getMessage(); throw e; public static void main(String args) try throwProcess(); catch (NullPointerException e) System.out.println(“再次捕获:“+e); ,30,30,6.3.3 throws子句,throws用来表明一个方法中可能抛出的各种异常,并说明该方法会抛出异常但不捕获的异常。如果想明确抛出一个RuntimeException或自定义异常类,就必须在方法的声明语句中用throws子句来表明它的类型,以便通知调用其它方法准备捕获它,这种情况一般需要两个方法来分别处理抛出异常和处理异常。,31,31,1 抛出异常交其他地方处理异常,在抛出异常的方法中要使用throws子句,throws子句的格式为: ,32,32,下面的例子声明在mathod方法中抛出异常 IllegalAccessException,在调用mathod的main方法里捕获异常。,例6.5 throws语句的使用。运行结果如图所示。 class TC5 static void mathod() throws IllegalAccessException System.out.println(“n在 mathod 中抛出一个异常“); throw new IllegalAccessException(); public static void main(String args) try mathod(); catch (IllegalAccessException e) System.out.println(“在 main 中捕获异常:“+e); ,33,33,2 由方法抛出异常交系统处理,在程序中能够处理的异常,可设计为try-catch-finally语句捕获并处理。对于程序无法处理必须由系统处理的异常,可以使用throws语句在方法中抛出异常交由系统处理。如下面的程序代码,就是将捕获异常交由系统处理。编译将没有问题,但执行程序时,如果该文件在当前目录中不存在,将由系统自动给出异常报告。如:a3.txt系统找不到指定文件。,34,34,例6.6 throws语句抛出异常交系统处理的例子。,import java.io.*; public class TC6 public static void main (String args) throws IOException FileInputStream fis = new FileInputStream(“a3.txt“); ,35,35,6.3.4 finally语句,当一个异常被抛出时,程序的执行就不再是连续的了,会跳过某些语句,甚至会由于没有与之匹配的catch子句而过早地返回。为了确保代码的执行,finally子句就是用来标识这样一段代码的。即使没有catch子句,finally语句块也会在执行了try语句块后立即被执行。 从一个方法返回到调用它的另外一个方法,或者是通过return语句,或者是通过一个没有被捕获的异常,但finally子句总是在返回前执行。,36,36,例6.7 finally子句的使用,运行结果如图所示。,37,37,class TC7 static void mathodA() try System.out.println(“nmathodA 抛出一个异常“); throw new RuntimeException(); finally System.out.println(“执行 mathodA 的 finally“); static void mathodB() try ,38,38,System.out.println(“mathodB 正常返回“); return; finally System.out.println(“执行 mathodB 的 finally“); public static void main(String args) try mathodA(); catch (Exception e) mathodB(); ,39,39,6.3.5 编译时对异常情况的检查,1可检测类和不可检测类 不可检测的异常类是RuntimeException及其子类、Error及其子类,其他的异常类则是可检测的类。标准Java API定义了许多异常类,既包括可检测的,也包括不可检测的。由程序定义的异常类也可以包含可检测类和不可检测类。,40,40,2可检测异常的处理,在编译时,编译器分析哪些方法会产生可检测的异常,然后检查方法中的可检测异常的处理部分。例如,类Thread的方法sleep定义如下: public static void sleep (long millis) throws InterruptedException ,41,41,2不可检测的异常(运行时异常类),编译器对不可检测的异常类不进行检查。 因为Java的设计者认为检测这些异常对Java程序的正确性方面帮助不大,而且这种情况发生的原因很多。对每一种情况都进行处理会很麻烦,所以这些异常在编译时不检查。因为这种错误可能发生在程序中的许多地方,恢复起来很困难或者根本不可能恢复。 解释器在执行程序时会对出现异常的程序给出异常报告。,42,42,6.4 创建自己的异常类,自定义异常类型是从Exception类中派生的,所以要使用下面的声明语句来创建: ,43,43,例6.8 创建自定义异常。运行结果如图所示。,44,44,class MyException extends Exception private int x; MyException(int a) x=a; public String toString() return “MyException“; public class TC8 static void mathod(int a) throws MyException / 声明方法会抛出MyException System.out.println(“t此处引用 mathod (“+a+“)“); if (a10) throw new MyException(a); / 主动抛出MyException System.out.println(“正常返回“); ,45,45,public static void main(String args) try System.out.println(“n进入监控区,执行可能发生异常的程序段“); mathod(8); mathod(20); mathod(6); catch (MyException e) System.out.println(“t程序发生异常并在此处进行处理“); System.out.println(“t发生的异常为:“+e.toString(); System.out.println(“这里可执行其它代码“); ,46,46,习 题,1什么是异常?为什么要进行异常处理? 2. 简述JAVA的异常处理机制。 3. 如何创建一个自定义异常? 4. 如何抛出自定义异常?,47,47,5下面程序的输出是什么?说出理由。(C),public class Q1 public static void main(String args) try throw new MyException(); catch (Exception e) System.out.println(“Its caught!“); finally System.out.println(“Its finally caught!“); class MyException extends E

温馨提示

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

评论

0/150

提交评论