java异常处理与输入输出流简介

上传人:野鹰 文档编号:3037454 上传时间:2017-07-29 格式:PPT 页数:78 大小:351KB
返回 下载 相关 举报
java异常处理与输入输出流简介_第1页
第1页 / 共78页
java异常处理与输入输出流简介_第2页
第2页 / 共78页
java异常处理与输入输出流简介_第3页
第3页 / 共78页
java异常处理与输入输出流简介_第4页
第4页 / 共78页
java异常处理与输入输出流简介_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《java异常处理与输入输出流简介》由会员分享,可在线阅读,更多相关《java异常处理与输入输出流简介(78页珍藏版)》请在金锄头文库上搜索。

1、第8讲 Java异常处理及输入输出流简介,8.1 异常处理概述 8.2 Java异常的处理方法 8.3 Java数据流概述和java.io包 8.4 File类 8.5文件输入与输出 8.6标准输入和输出,本章要点,了解异常和异常分类理解Java异常处理机制和异常类。掌握try/catch/ finally语句处理异常的方式以及如何声明异常。了解自定义异常。 理解Java语言中数据流的概念掌握各种常用的输入输出流类掌握各种文件操作类,了解流类的继承关系,8.1 异常处理概述,Java异常是描述在代码段中发生的运行出错情况的对象。程序中的错误可能来自于编译错误和运行错误。编译错误是由于所编写的程

2、序存在语法问题,未能通过由源代码到目标代码的编译过程而产生的错误,它将由语言的编译系统负责检测和报告;运行错误是在程序的运行过程中产生的错误。,8.1.1 什么是异常,在程序执行中,任何中断正常程序流程的异常条件就是错误或异常。 第一种,Java 虚拟机检测到了非正常的执行状态,这些状态可能是由以下几种情况引起的: 表达式的计算违反了Java 语言的语义,例如整数被0 除。 在载入或链接Java 程序时出错。 超出了某些资源限制,例如使用了太多的内存。第二种,Java 程序代码中的throw 语句被执行。第三种,异步异常发生。异步异常的原因可能有: Thread 的stop 方法被调用。 Ja

3、va 虚拟机内部错误发生。,8.1.2 异常处理机制,Java异常处理是通过5个关键字来管理的。它们是try、catch、throw、throws和finally。程序里,需要被监测的程序语句序列应包含在一个try代码块中。如果try代码块中有异常发生,那么就要抛出该异常。可以用catch来捕获这个异常,并且在catch块中加以适当地处理。系统产生的异常会由Java运行时系统自动抛出。如果要手动抛出异常,则使用关键字throw。在一些情况下,从一个方法抛出的异常必须用一个throws语句指定为异常。最后,从try代码块退出时,必须执行的代码要放在一个finally代码块中。,8.1.3 异常分

4、类,Java中的异常类具有层次组织,其中Throwable类是Error类(错误类)和Exception类(异常类)的父类,Throwable是Object的直接子类。异常类(java.lang.Exception)继承于java.lang.Object中的java.lang.Throwable类。异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种。,异常类的继承结构,1执行异常,即运行时异常,继承于RuntimeException。Java编译器允许程序不做处理。ArithmeticException:一个不寻常算术运算产生的异常。A

5、rrayStoreException:存入数组的内容数据类型不一致所产生的异常。ArrayIndexOutOfBoundsException:数组索引超出范围所产生的异常。ClassCastExcption:类对象强迫转换造成不当类对象所产生的异常。NumberFormatException:字符串转换数值所产生的异常。IndexOutOfBoundsException:索引超出范围所产生的异常。NegativeException:数组建立负值索引所产生的异常。NullPointerException:对象引用参考值为null所产生的异常。,2检查异常,除了执行异常外,其余的子类是属于检查异常

6、类也称为非运行时异常,它们都在java.lang类库内定义。Java编译器要求程序必须捕获或者声明抛弃这种异常。ClassNotFoundException:找不到类或接口所产生的异常。CloneNotSupportedException:使用对象的clone方法但无法执行Cloneable所产生的异常。IllegaAccessException:类定义不明确所产生的异常。InstantiationException:使用newInstance方法试图建立一个类instance时所产生的异常。InterruptedException:目前线程等待执行,另一线程中断目前线程所产生的异常。,8.1

7、.4 错误分类,Error类与异常一样,它们都是继承自java.lang.Throwable类。Error 类对象由 Java 虚拟机生成并抛出。Error类包括linkageError(结合错误)与VitualmachineError(虚拟机错误)两种子类。,LinkageError 的子类表示一个类依赖于另一个类,但是,在前一个类编译之后, 后一个类的改变会与它不兼容。 ClassFormarErro:类格式所产生的错误。 ClassCircularityError:无限循所产生的错误。 ExceptionInInitializerError:初始化所产生的错误。 NoClassDeFor

8、matError:没有类定义所产生的错误。VeritfyError:类文件某些数据不一致或安全问题所产生的错误。UnsatisfidLinkError:Java虚拟机无法找到合适的原始语言(native-language)定义的方法所产生的错误。IncompatibleClassChangeError:不兼容类所产生的错误。AbtractMethodError:调用抽象方法所产生的错误。NoSuchFieldError:存取或改变数据域所产生的错误。NoSchMethodError :调用类方法所产生的错误。IllegalAccessError:不合法存取或改变数据域或调用方法所产生的错误。I

9、nstantionError:使用抽象类或接口所产生的错误。,1linkageError,当Java虚拟机崩溃了或用尽了它继续操作所需的资源时,抛出该错误。VitualmachineError包含InternalError,OutOfMemoryError ,StackOverflow- Error,UnknownError。这些类所代表的意义:InternalError:虚拟机内部所产生的错误。OutOfMemoryError:虚拟机内存不足所产生的错误。StackOverflowError:堆栈无法容纳所产生的错误。UnknownError:虚拟机不知名异常所产生的错误。,2Vitualm

10、achineError,8.2 Java异常的处理方法,当发生Exception时,那么,在编写程序时可以采取的措施: 通过将trycatch()块纳入其代码中,在这里捕获被命名为属于某个超类的异常,并调用方法处理它。 让被调用的方法表示它将不处理异常,将该异常抛到它所遇到的调用方法中。这用throws子句实现。使用throws子句标记调用方法的声明如下所示:public void troublesome() throws Exception其中,关键字throws之后是所有异常的列表,方法可以将它们抛回到它的调用程序中。,1try/catch try/catch异常处理代码块的基本形式: t

11、ry /监视 可能发生异常的代码块; catch(异常类型 异常对象名)/捕获并处理异常异常处理代码块; 当抛出一个异常时,异常会由相应的catch语句捕获并处理。与一个try相关的catch语句可以有多个,构成多重catch 语句,异常类型决定了要执行哪个catch语句。 如果没有抛出异常,那么try代码块就会结束,并且会跳过它的所有catch语句,从最后一个catch后面的第一个语句继续执行。,8.2.1 try/catch/finally,public class ExceptionExam0 public static void main(String args) int i,a; t

12、ry / 监视一代码块 i=0;a=42/i;return; catch (ArithmeticException e) /捕获一个被零除异常System.out.println(被零除); ,例8.1使用try/catch进行异常处理的情况。,例8.1运行结果如图所示,2可嵌入的try块,一个try代码块可以嵌入到另一个try代码块当中。由于内部try代码块产生的异常如果没有被与该内部try代码块相关的catch捕获,就会传到外部try代码块。通常嵌入式try代码块用于以不同方式处理不同类型的错误。某些类型的错误是致命的,无法修改。某些错误则较轻,可以马上处理。许多程序员在使用外部try代码

13、块捕获大部分严重错误的同时,让内部try代码处理不太严重的错误。,public class ExceptionExam2public static void main(String args)int data1 =2,4,6,8,10,12;int data2 =1,0,2,4,3;tryfor(int i=0;idata1.length;i+) trySystem.out.println(data1i+ /+data2i+ is+data1i/data2i);catch(ArithmeticException e)System.out.println(不能被零除!);catch(ArrayI

14、ndexOutOfBoundsException e)System.out.println(程序被终止!);,例8.2 嵌套try语句的示例。,例8.2运行结果如图所示,3使用多重catch 语句,与一个try相关的catch语句可以有多个。每一个catch语句捕获一个不同类型的异常。某些情况,由单个代码段可能引起多个异常。处理这种情况时就需要定义两个或更多的catch子句,每个子句捕获一种类型的异常。当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句被执行。当一个catch语句执行以后,其他的子句被忽略,程序从try/catch块后的代码开始继续执行。,public c

15、lass ExceptionExam3 public static void main(String args) try int i = args.length;System.out.println(i =+i);int j=5/i;int k= 1,2,3 ;k5=0;catch(ArithmeticException e) System.out.println(被零除: + e); catch(ArrayIndexOutOfBoundsException e) System.out.println(Array index out of bound exception: + e); System.out.println(执行catch块后的语句块);,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号