版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 异常处理异常异常(Exception)也叫例外。在软件开发过程中,很多情况都将导致异常的产生,例如: (1) 想打开的文件不存在; (2) 网络连接中断; (3) 操作数超出预定范围; (4) 正在装载的类文件丢失; (5) 访问的数据库打不开;在Java中,异常本身作为一个对象,产生异常就是产生一个异常对象。这个对象可能由应用程序本身产生,也可能由 Java 虚拟机产生。文件操作将产生异常import java.io.*;class Exception1 public static void main(String args) FileInputStream fis =new Fil
2、eInputStream(text.txt); int b; while(b=fis.read()!=-1) System.out.print(b); fis.close(); 文件异常信息D:userchap08javac Exception1.javaException1.java:5: unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown FileInputStream fis = new FileInputStream(text.txt); Exceptio
3、n1.java:7: unreported exception java.io.IOException; must be caught or declared to be thrown while(b=fis.read()!=-1) Exception1.java:10: unreported exception java.io.IOException; must be caught ordeclared to be thrown fis.close(); 3 errors数组下标超界public class Exception2 public static void main (String
4、 args) String langs = Java,Visaul Basic,C+; int i = 0; while (i javac Exception2.java D:userchap08java Exception2JavaVisaul BasicC+Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 3at Exception2.main(Exception2.java:8)上面的例子编译可以通过,但运行时出现异常信息被抛出。在其循环被执行四次之后,数组下标溢出,程序终止.除0class Except
5、ion3 public static void main(String args) int a=0; System.out.println(5/a); 运行结果:D:userchap08javac Exception3.javaD:userchap08java Exception3Exception in thread main java.lang.ArithmeticException: / by zero at Exception3.main(Exception3.java:5)异常的主要类型在上面的三个例子中,我们都遇到了异常java.io.IOException、java.io.Fil
6、eNotFoundExceptionjava.lang.ArrayIndexOutOfBoundsExceptionjava.lang.ArithmeticException分别指明了异常的类型以及异常所在的包。对某些异常,程序中必须对它进行处理,否则编译程序会指出错误(如例1)。但对另一些异常,在程序中可以不做处理,而直接由运行时系统来处理(如例3)。Java的异常处理机制捕获异常在Java程序运行过程中系统得到一个异常对象时,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获(catch)
7、异常。如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。声明抛弃异常当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(throws)异常。异常体系结构用于Java运行时系统来显示与运行时系统本身有关的错误用于用户程序可能捕获的异常,也是用来创建用户异常类型子类的类。所有异常类型都是内置类Throwable的子类常见的运行时异常 常见的运行时异常如下:(1) 类型转换异常ClassCastExceptionString strName=new string(“123”);int nNum
8、ber=(int)strName; (2) 数组超界异常ArrayIndexOutBoundsExceptionint b=new int10;b10=1000;(3) 指定数组维数为负值异常NegativeArraySizeExceptionb-1=1001;(4) 算术异常ArithmeticExceptionint b=0;a=500/b;(5) Java系统内部异常InternalExceptionJVM抛出的异常。(6) 类型不符合异常IncompatibleTypeExceptionint n=12345;String s=(String)n; (7) 内存溢出异常OutOfMem
9、eoryException(8) 没有找到类定义异常NoClassDefFoundExceptionaClass aa=new aClas(); /但aClass类未定义。(9) 空指针异常 NullPointerExceptionint b ;b0=99; /没有实例化,就访问,将产生空指针。常见的非运行时异常ClassNotFoundException :找不到类或接口所产生的异常CloneNotSupportedException:使用对象的 clone 方法但无法执行 Cloneable 所产生的异常。IllegalAccessException :类定义不明确所产生的异常。例如:类不
10、为 public ,或是包含一个类定义在另一个类库内。IOException :在一般情况下不能完成I/O操作所产生的异常。EOFException: 打开文件没有数据可以读取所产生的异常FileNotFoundException :在文件系统中,找不到文件名称或路径所产生InterruptedIOException:目前线程等待执行,另一线程中断目前线程I/O运行所产生的异常 捕获异常的实现捕获异常是通过try-catch-finally语句实现的 try .catch( ExceptionName1 e ). catch( ExceptionName2 e ).finally. 1、try
11、捕获异常的第一步是用try选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。2、catch 每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。catch语句只需要一个形式参数来指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传递给catch块。catch块中的代码用来对异常对象进行处理,与访问其它对象一样,可以访问一个异常对象的变量或调用它的方法。 try.catch( FileNotFoundException e )System.out.println( e
12、 );System.out.println( message: +e.getMessage() );e.printStackTrace( System.out );catch( IOException e )System.out.println( e ); 3、catch 语句的顺序 捕获异常的顺序和catch语句的顺序有关,当捕获到一个异常时,剩下的catch语句就不再进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。 4、finally捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程
13、序的状态作统一的管理。一般是用来关闭文件或释放其他的系统资源。虽然finally作为try-catch-finally结构的一部分,但在程序是可选的。如果存在finally语句,不论try块中是否发生了异常,是否执行过catch 语句,都要执行finally语句。 创建用户异常类如果 Java 提供的系统异常类型不能满足程序设计的需求,我们可以设计自己的异常类型。用户定义的异常类型必须是 Throwable 的直接或间接子类。Java 推荐用户的异常类型以 Exception 为直接父类。创建用户异常的方法如下: class UserException extends Exception UserException() super(); /其它语句 * 读取用户输入数据流/读入输出Inpu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海市延安实验初级中学2026年初三下学期4月考物理试题理试题含解析
- 2026届吉林省长春五十二中学初三下学期适应性月考卷(三)物理试题含解析
- 2026年大学大一(教育学)教育学原理阶段测试试题及答案
- 护理课程实体班课件下载分享资源
- 2025年前台防疫考核模拟卷
- 2025年前台电子入住训练
- 护理专业研究进展分享
- 护理人员心电图异常解读技巧
- 护理安全隐患识别与防范
- 2026三年级数学上册 加减法单元的重点突破
- (新教材)2026年春期人教版一年级下册数学 第三单元 100以内数的认识 核心素养教案
- 2026年时事政治测试题库100道附参考答案(完整版)
- 国家事业单位招聘2024中央宣传部直属单位招聘106人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 2026年江苏城乡建设职业学院单招职业技能考试题库参考答案详解
- 2026年江苏单招语数英综合拔高卷含答案省统考难题突破版
- 田忌赛马整合课件
- 2025华能澜沧江水电股份有限公司校园招聘笔试参考题库附带答案详解(3卷)
- 2025中国农业大学管理服务岗位(非事业编)招聘1人笔试备考试题附答案解析
- 2026年日照航海工程职业学院单招综合素质考试题库含答案详解
- 北京市大兴区2024-2025学年九年级上学期语文期末试卷(含答案)
- 化工萃取工艺优化与分离效率提升
评论
0/150
提交评论