版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.1异常处理.2目标v理解异常的概念v运用 try 块、catch 块和 finally 块处理异常v运用多重 catch 块处理异常v运用嵌套 try/catch 块处理异常v运用关键字 throw 和 throws 处理异常v运用JAVA编写和使用自定义异常.3生活中的异常v正常情况下v但是,异常情况迟早要发生!一路畅通一路畅通堵车!堵车!撞车!撞车!.4程序中的异常public class HelloAccp public static void main(String args) System.out.print(请输入请输入1至至3之间的数字之间的数字:);Scanner in =
2、new Scanner(System.in);int courseCode = in.nextInt(); / 从键盘输入整数从键盘输入整数switch (courseCode) case 1:System.out.println(C#编程编程); break;case 2:System.out.println(Java编程编程); break;case 3:System.out.println(SQL基础基础); 输入:输入:1输出:输出: C#编程编程输入:输入:abc程序中断运行!程序中断运行!正常情况:正常情况:异常情况:异常情况:.5什么是异常v异常就是在程序的运行过程中所发生的不正
3、常的事件,它会中断正在运行的程序绕行或者等待绕行或者等待请求交警解决请求交警解决异常!异常!v面对异常该怎么办呢?通常情况下,我们会这样处理:程序运行程序运行程序中断运行程序中断运行堵车!堵车!撞车!撞车!生活中,我们会根据不同的异常进行相应的处理,生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活而不会就此中断我们的生活.6ExceptionArithmeticExceptionNullPointerExceptionObjectThrowableErrorThreadDeathSQLExceptionRuntimeExceptionNumberFormatExceptio
4、n异常类的层次结构vThrowable 具有两个子类,它们是Exception:处理用户程序应当捕获的异常情况Error:Error 类的异常为内部错误,因此在正常情况下不期望用户的程序捕获它们 AWTError.7Java异常类 文件结束文件结束EOFException找不到文件找不到文件FileNotFoundExceptionI/O 异常的根类异常的根类IOException数字转化格式异常,比如字符串到数字转化格式异常,比如字符串到 float 型数字的转换无效型数字的转换无效NumberFormatException不能加载所需的类不能加载所需的类ClassNotFoundExcep
5、tion方法接收到非法参数方法接收到非法参数IllegalArgumentException数组大小小于或大于实际的数组大小数组大小小于或大于实际的数组大小ArrayIndexOutOfBoundException尝试访问尝试访问 null 对象成员对象成员NullPointerException许多许多 java.lang 异常的基类异常的基类RuntimeException异常层次结构的根类异常层次结构的根类Exception算术错误情形,如以零作除数算术错误情形,如以零作除数ArithmeticException线程中断线程中断InterruptedException说说 明明异异 常常
6、.8什么是异常处理vJava编程语言使用异常处理机制为程序提供了错误处理的能力程序中预先想好了程序中预先想好了 对付异常的处理办法对付异常的处理办法 异常!异常! 程序运行程序运行处理完毕,程序继续运行处理完毕,程序继续运行对异常进行处理对异常进行处理.9Java中如何进行异常处理vJava的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws 捕获异常捕获异常 catchtryfinally执行可能产生执行可能产生 异常的代码异常的代码 捕获异常捕获异常 无论是否发生异常,无论是否发生异常,代码总能执行代码总能执行手动抛出异常手动抛出异常 抛出异常
7、抛出异常 throw声明异常声明异常 声明方法可能要声明方法可能要抛出的各种异常抛出的各种异常 throws.10异常处理块的一般形式try / 要监控错误的代码块要监控错误的代码块 catch (Exception e) / Exception e 的异常处理程序的异常处理程序 finally / 在在 try 结束前要执行的代码块结束前要执行的代码块.11try/catch块trycatch try/catch 块后的代码段块后的代码段public void method()try / 代码段代码段(此处不会产生异常此处不会产生异常) catch (异常类型异常类型 ex) / 对异常进行
8、处理的代码段对异常进行处理的代码段/ 代码段代码段v使用try/catch块捕获异常,分为三种情况:第一种情况第一种情况 .12try/catch块7-2v使用示例模拟第一种情况:public class AccpException public static void main(String args) System.out.print(请输入请输入1至至3之间的数字之间的数字:);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.o
9、ut.println(C#编程编程); break;case 2: System.out.println(Java编程编程); break;case 3: System.out.println(SQL基础基础); catch (Exception ex) System.out.println(输入不为数字输入不为数字!);System.out.println(欢迎提出建议欢迎提出建议!);输入:输入:2Java编程编程欢迎提出建议欢迎提出建议!控制台输出控制台输出.13try/catch块trycatch异常类型匹配异常类型匹配 try/catch 块后的代码段块后的代码段进入进入catch块
10、块public void method()try / 代码段代码段 1 / 产生异常的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5v使用try/catch块捕获异常,分为三种情况:第二种情况第二种情况 产生异常对象产生异常对象 程序继续执行程序继续执行异常是一种特殊的对象,类型为异常是一种特殊的对象,类型为java.lang.Exception或其子类或其子类 发生异常发生异常.14try/catch块7-4v使用示例模拟第二种情况:public class AccpExcepti
11、on public static void main(String args) System.out.print(请输入请输入1至至3之间的数字之间的数字:);Scanner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1:System.out.println(C#编程编程);break;case 2:System.out.println(Java编程编程);break;case 3:System.out.println(SQL基础基础); catch (Excep
12、tion ex) System.out.println(输入不为数字输入不为数字!); ex.printStackTrace();System.out.println(欢迎提出建议欢迎提出建议!);输入:输入:abc输入不为数字输入不为数字!异常堆栈信息异常堆栈信息欢迎提出建议欢迎提出建议!控制台输出控制台输出.15vprintStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程 public class AccpException public static void main(String args) System.out.print(请输入课程代号请输入课程代号(1至至3之
13、间的数字之间的数字):); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); /此处代码省略此处代码省略 catch (Exception ex) System.out.println(输入不为数字!输入不为数字!); ex.printStackTrace(); System.out.println(欢迎提出建议欢迎提出建议!); try/catch块java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Unknown Source
14、)at java.util.Scanner.next(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at HelloAccp.main(HelloAccp.java:8)异常类型异常类型异常堆栈信息异常堆栈信息在此方法中抛出了异常在此方法中抛出了异常.16try/catch块trycatch异常类型不匹配异常类型不匹配 try/catch 块后的代码段块后的代码段程序中断运行程序中断运行 发生异常发生异常public void meth
15、od()try / 代码段代码段 1 / 产生异常的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5v使用try/catch块捕获异常,分为三种情况:第三种情况第三种情况 产生异常对象产生异常对象 .17try/catch块7-7v使用示例模拟第三种情况:public class AccpException2 public static void main(String args) System.out.print(请输入课程代号请输入课程代号(1至至3之间的数字之间的数字):);Sc
16、anner in = new Scanner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.out.println(C#编程编程); break;case 2: System.out.println(Java编程编程); break;case 3: System.out.println(SQL基础基础); catch (NullPointerException ex) System.out.println(输入不为数字!输入不为数字!);System.out.println(欢迎提
17、出建议!欢迎提出建议!);输入:输入:abc程序中断运行程序中断运行.18try/catch/finally v在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行try 块块 finally 块块 catch 块块 无异常无异常 有异常有异常 .19try/catch/finally 2-2 public class AccpException3 public static void main(String args) System.out.print(请输入请输入1至至3之间的数字:之间的数字:);Scanner in = new Sc
18、anner(System.in);try int courseCode = in.nextInt();switch (courseCode) case 1: System.out.println(C#编程编程); break;case 2: System.out.println(Java编程编程); break;case 3: System.out.println(SQL基础基础); catch (Exception ex) System.out.println(输入不为数字!输入不为数字!); finally System.out.println(欢迎提出建议!欢迎提出建议!);输入:输入:
19、2Java编程编程欢迎提出建议欢迎提出建议!控制台输出控制台输出输入:输入:abc输入不为数字输入不为数字!欢迎提出建议欢迎提出建议!第一种情况:第一种情况:无异常无异常第二种情况:第二种情况:有异常有异常 .20public void method()try / 代码段代码段 / 产生异常产生异常(异常类型异常类型2) catch (异常类型异常类型1 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型2 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型3 ex) / 对异常进行处理的代码段对异常进行处理的代码段/
20、 代码段代码段多重catch块 2-1v一段代码可能会引发多种类型的异常v当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的catch语句v执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略 try 与异常类型与异常类型1不匹配不匹配try/catch 块后的代码段块后的代码段发生异常发生异常产生异常对象产生异常对象catch与异常类型与异常类型2匹配匹配catchcatch程序继续执行程序继续执行进入进入catch块块.21多重catch块 2-2public class AccpException4 public static void m
21、ain(String args) Scanner in = new Scanner(System.in);trySystem.out.print(“请输入请输入S1的总学时:的总学时:);int totalTime = in.nextInt(); /总学时总学时System.out.print(“请输入请输入S1的课程数目:的课程数目:);int totalCourse = in.nextInt(); /课程数目课程数目System.out.println(“S1各课程的平均学时为:各课程的平均学时为: + totalTime / totalCourse); catch (InputMisma
22、tchException e1) System.out.println(输入不为数字输入不为数字!); catch (ArithmeticException e2) System.out.println(课程数目不能为零课程数目不能为零!); catch (Exception e) System.out.println(发生错误发生错误:+e.getMessage();输入:输入:270 H 在安排在安排catch语句的顺序时,首先应该捕获最特殊的异常,语句的顺序时,首先应该捕获最特殊的异常, 然后再逐渐一般化,即先子类后父类然后再逐渐一般化,即先子类后父类 输出:输出:输入不为数字输入不为数
23、字!进入第一个进入第一个catch块块输入:输入:270 0 输出:输出:课程数目不能为零课程数目不能为零!进入第二个进入第二个catch块块.22抛出异常v如果在当前环境无法解决一个异常,就要将其抛出,把异常交给调用者处理 public class AccpTeacher private String id; / 教员编号,长度应为教员编号,长度应为7 public void setId(String pId) / 判断教员编号的长度是否为判断教员编号的长度是否为7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentE
24、xception(参数长度应为参数长度应为7!); public class AccpTeacherTest public static void main(String args) AccpTeacher teacher = new AccpTeacher(); try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 抛出异常抛出异常捕获异常捕获异常参数长度应为参数长度应为7!控制台输出控制台输出.23声明异常public class AccpTeacher
25、 private String id;/ 教员编号教员编号,长度应为长度应为7 public void setId(String pId) throws IllegalArgumentException / 判断教员编号的长度是否为判断教员编号的长度是否为7 if (pId.length() = 7) id = pId; else throw new IllegalArgumentException(参数长度应为参数长度应为7!); public class AccpTeacherTest public static void main(String args) AccpTeacher tea
26、cher = new AccpTeacher();try teacher.setId(088); catch (IllegalArgumentException ex) System.out.println(ex.getMessage(); 由调用者捕获异常由调用者捕获异常 声明该方法可能会产生异常声明该方法可能会产生异常 .24用户自定义异常 v自定义异常概念v使用自定义异常的时候JavaAPI提供的内置异常不一定总能捕获程序中发生的所有错误。有时会需要创建用户自定义异常 v自定义异常需要继承Exception 及其子类.25用户自定义异常 v创建一个类继承 Exception 或其子类v为该异常类添加构造方法v在一个方法中使用throw抛出异常v在另一个方法中捕获并处理异常class MyException extends Exception private int i;MyException(int a) i = a;public String toString() return i + 大于大于10啦啦;.26用户自定义异常 2-3public class ExceptionDemo static void go(int a) throws MyException
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【正版授权】 ISO 15883-3:2024 EN Washer-disinfectors - Part 3: Requirements and tests for washer-disinfectors employing thermal disinfection for human waste containers
- 劳动合同纠纷仲裁代理词撰写指南
- 美国专有技术转让合同案例
- 企业合同权益转让协议书案例
- 房地产代理销售合同书范文示例
- 工程项目管理合同的关键条款
- 代售协议书范例
- 店面临时租赁合同书
- 2024宽带接入电信服务协议范本
- 小产权住宅购买协议书
- 2024年消防月全员消防安全知识专题培训-附20起典型火灾案例
- 2025届高三化学一轮复习 第13讲 铁盐、亚铁盐及其转化 课件
- 【电商企业跨国并购的绩效探析案例:以阿里巴巴并购Lazada为例(论文)14000字】
- 恒牙临床解剖-上颌中切牙(牙体解剖学课件)
- 云南太阳能资源分析
- 2024智慧园区系统建设规范
- GB/T 44592-2024红树林生态保护修复技术规程
- 第5课 互联网接入 教学设计 2023-2024学年浙教版(2023)初中信息技术七年级上册
- 小学语文一年级上册课件第四单元01-10 ai ei ui
- 传感器技术-武汉大学
- GB/T 44413-2024城市轨道交通分类
评论
0/150
提交评论