版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、异常,了解异常的定义 了解异常的分类 掌握 try、catch 和 finally 语句的用法 掌握throw、throws子句的用法 掌握如何定义自己的异常,目标,2007 iSoftStone Holdings Ltd. All Rights Reserved.,3,什么是异常?,异常类通常用来定义程序所遇到的轻微意外。可以写代码来处理异常并继续程序执行,而不是让程序中断。 例如:发生下列情况时,会出现异常: 想打开的文件不存在 网络连接中断 受控操作数超出预定范围 正在装载的类文件丢失,在程序中发生错误时,发现错误的方法能抛出一个异常到其调用程序。然后,调用方法捕获该异常,以一定的方法处
2、理异常并继续程序执行。 这个方案给程序员一个写处理程序的选择,来处理异常。 它为系统和用户之间提供了一种友好的交互方式。 增强程序的健壮性,异常机制有什么作用,public static void main(String args) int i = 0; String greetings = Hello world!, No, I mean it!, HELLO WORLD!; while (i 4) System.out.println (greetingsi); i+; ,示例(1),Hello world! No, I mean it! HELLO WORLD! Exception in
3、 thread main java.lang.ArrayIndexOutOfBoundsException: 3 原因: 当i = 3是,按照循环中的规定,要输出的greetings3不存在,超出了数组的边界,因而产生异常。,运行结果,2007 iSoftStone Holdings Ltd. All Rights Reserved.,7,异常体系结构,Error JVM系统内部错误,表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 Exception 表示一种设计或实现问题,即如果程序运行正常,从不会发生的情况(比如刚才的数组越界)。,分类说
4、明,JAVA异常类都是系统类库中Exception类的子类。 Exception类是java.lang.Throwable类的一个子类,构造函数为: public Exception(); public Exception(String s); 它从Throwable类那里继承了若干方法。常用的为: public String toString():返回异常类信息 public void printStackTrace():在当前标准输出上输出异常信息,异常类Exception,2007 iSoftStone Holdings Ltd. All Rights Reserved.,10,常见异常
5、,异常的处理主要包括捕捉异常、程序流程的跳转和异常处理语句块的定义等。当一个异常被抛出时,应该有专门的语句来捕获这个被抛出的异常对象,这个过程被称为捕捉异常。当一个异常类的对象被捕捉或接收后,用户程序就会发生流程的跳转,系统中止当前的流程而跳转至专门的异常处理语句块,或直接跳出当前程序和Java虚拟机回到操作系统,异常处理,在Java程序里,异常对象是依靠try/catch语句来捕捉和处理的。try/catch异常处理语句块分为try语句块和catch语句块,其格式如下: try /try语句块,可能产生异常情况 catch (SqlException e1) /catch语句块,对异常进行处
6、理 catch (NullPointException e2) /catch语句块,对异常进行处理 catch (Exception e3) /catch语句块,对异常进行处理 将能够抛出异常的代码放入try块中,然后创建相应的catch块的列表。 如果生成的异常与catch中提到的相匹配,catch条件的块语句就被执行。 在try块之后,可能有许多catch块,每一个都处理不同的异常。一定要将特殊的异常写在前面,try和catch语句,13,public static void main(String args) int i = 0; String greetings = Hello wor
7、ld!, No, I mean it!,HELLO WORLD!; try while (i 4) System.out.println (greetingsi); i+; / 当try块发生异常的时候,异常会被catch所捕获 catch(Exception e) System.out.println(捕获异常:+e.toString(); ,示例(2),多异常处理是通过在一个try块后面定义若干个catch块来实现的,每个catch块用来接收和处理一种特定的异常对象 。,多异常的捕获和处理,在设计catch块处理不同的异常时,一般应注意如下 问题: (1) catch块中的语句应根据异常的
8、不同而采取不同的处理方法,比较通用的操作是打印异常和与该异常相关的信息,包括异常名称和产生异常的方法名等。 (2) 由于异常对象与catch块的匹配是按照catch块的先后排列顺序进行的,所以要处理多异常时应注意认真设计各catch块的排列顺序。 (3) 在用多catch语句时,记住异常子类必须在它们任何父类之前使用是很重要的。这是因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,如果子类在父类后面,子类将永远不会到达,设计catch块处理,finally语句只用来控制从trycatch语句转移到另一部分前的一些必要的善后工作,这些工作包含了关闭文件或释放其他有关系统资源。
9、finally语句执行的是一种强制的无条件执行,即无论在程序中是否出现异常,也不管出现的是哪一种异常,即使try代码块中包含有break、continue、return或者throw语句,都必须执行finally块中所包含的语句。 在出现和未出现异常的情况下都要执行的代码,可以放到finally子句中,finally语句,17,public static void main(String args) int i = 0; String greetings = Hello world!, No, I mean it!,HELLO WORLD!; try while (i 4) System.ou
10、t.println (greetingsi); i+; catch(Exception e) System.out.println(捕获异常:+e.toString(); finally System.out.println(finally 继续执行); ,示例(3),Java应用程序在运行时如果出现了一个可识别的错误,就会产生一个与该错误相对应的异常类的对象,这个对象包含了异常的类型和错误出现时程序所处的状态信息,这个异常对象首先被交给Java虚拟机,由虚拟机来寻找具体的异常处理者。在Java中把产生异常对象并将其交给Java虚机的过程称为称为异常的抛出,异常的抛出,异常是通过关键字 thr
11、ow 抛出,程序可以用throw语句引发明确的异常。如: try if(flag0) throw new NullPointerException(); throw语句的操作数一定是Throwable类类型或Throwable子类类型的一个对象,使用 throw,如果一个方法可以导致一个异常但不处理它,就必须在方法声明中包含一个throws子句。 一个throws子句列举了一个方法可能引发的所有异常类型。(除Error类型以外) 一个方法可以引发的所有其他类型的异常必须在 throws子句中声明。如果不这样做,将会导致编译错误,throws,/ 定义方法的时候已经定义了必须抛出了一个异常 pr
12、ivate void getConn()throws SQLException System.out.println(); public static void main(String args) ThrowsDemo t = new ThrowsDemo(); try /调用此方法的时候必须捕获或者throws继续向上一层抛, / 否则通不过编译 t.getConn(); catch (SQLException e) e.printStackTrace(); ,示例(3),当一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类。 如果父类抛出多个异常,那么重写方法必须抛出那些异常的一
13、个子集,也就是说不能抛出新的异常,注意,1 通过扩展Exception 类来创建 2 包含一个构造函数和方法,体系对应的错误信息 class MyException extends Exception private int idCode ; public MyException(String msg,int id) super(msg); this.idCode = id ; public int getIdCode() return idCode; ,自定义异常,public class MyExceptionDemo public double devide(int x,int y)throws MyException if(y0) throw new MyException(被除数为负数,-1); return x/y; public static void main(String args) MyExceptionDemo t = new MyExceptionDemo(); try t.devide(10, -3); catch (MyException e) e.printStackTrace(); ,使用自己的异常,1 如果可以提前检测出来的异常,应该尽量避免使用,影响
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 19799.1-2026无损检测超声检测试块第1部分:1号标准试块
- 2026二上数学物体细分类情境课件
- 2026二上数学第五单元趣味课件
- 医用耗材挂网计价单位管理总结2026
- 2026北师大二下一分有多长核心素养课件
- 天津市特殊建设工程消防设计文件编制指南-民用建筑篇 (2026年版)
- 骨代谢指标临床解读2026
- 以太网工业化-工业通信简单化
- 传统文化-猜谜语
- AI算力与高速互连升级:全球高频高速板市场进入高价值增长周期
- 2026秋季学期新教材译林版(三起)六年级上册英语Unit 1 Try your best 教案(3课时)
- 2026年秋季开学第一课:新时代青年使命
- 绵阳英才中学2025初一入学语文分班考试真题含答案
- 新二升三暑假英语26个字母每日一练过关练22天
- 2026秋西师大版小学数学五年级(新教材)上册教学计划附教学进度表
- 2026年高校行政管理岗招聘笔试典型试题及要点含答案
- 光伏施工方案范文模板
- 2026年时事政治考试题库及答案(100题)
- 2026智慧灯杆商业化模式评估及城市更新与基础设施REITs报告
- 2023-2024学年广西南宁二中高一(下)期末生物试卷
- 2026年广播电视天线工题库及参考答案详解【突破训练】
评论
0/150
提交评论