




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十三章 -使用异常处理程序错误使用异常处理程序错误回顾回顾/public interface Introduceable public String detail();public void introduction()private void showMessage();void speak();Java接口中的方法必须是接口中的方法必须是publicJava接口中不能有方法体实现接口中不能有方法体实现 编译器会自动加上编译器会自动加上public修饰符修饰符请指出下列Java代码中的错误。回顾回顾/public class Teacher implements Introduceable
2、 public void check(int x, int y) if(MAX=MIN) int m=0; m=MAX; MAX=MIN; MIN=m; System.out.println(最大值是最大值是:+MAX+“ 最小值是:最小值是:+MIN);else System.out.println(最大值是最大值是:+MAX+“ 最小值是:最小值是:+MIN); 请指出下列Java代码中的错误。public interface Introduceable int MAX=233;int MIN=122;public void check();public class Text public
3、 static void main(String args) Introduceable i=new Introduceable(); i.check();学习目标学习目标n掌握Java的异常处理机制运用 try 、catch 、 finally 处理异常运用 throw 抛出异常运用 throws 声明异常/生活中的异常生活中的异常n正常情况下,小王每日开车去上班,耗时大约30分钟/l但是,异常情况迟早要发生!一路畅通一路畅通堵车!堵车!撞车!撞车!程序中的异常程序中的异常/public class Hello public static void main(String args) Sys
4、tem.out.print(请输入课程代号请输入课程代号(1至至3之间的数字之间的数字):);Scanner in = 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基础基础); 输入:输入:2输出:输出:Java编程编程输入:输入:B程序
5、中断运行!程序中断运行!正常情况:正常情况:异常情况:异常情况:什么是异常什么是异常n异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序nJava异常分为两大类:错误(Error):是指JVM系统内部错误、资源耗尽等严重情况。程序员对此错误一般无能为力。例外(Exception):则是指因编程错误或偶然的外在因素导致的一般性问题例如:除数为0 要打开的文件并不存在 在访问数组时,数组的下标值超过了数组容许的范围。 原本预期用户由键盘输入的是整数,但用户输入的却是英文字母。/异常!异常!程序运行程序运行程序中断运行程序中断运行什么是异常什么是异常n面对异常该怎么办呢?通常情况
6、下,我们会这样处理:设计良好的程序应该在异常发生时提供处理这些错误的方法,使程序不会因为异常的发生而阻断或产生不可见的结果。Java程序的执行过程中如果出现异常事件,可以生产一个异常类对象,该异常对象封装了异常事件的信息并将信息提交给Java运行时系统,这个过程称为抛出(throw)异常。当Java运行时系统接收到异常对象时,会寻找能处理这个异常的代码并把当前异常对象交给其处理。这个过程称为捕获(catch)异常。/绕行或者等待绕行或者等待请求交警解决请求交警解决堵车!堵车!撞车!撞车!生活中,我们会根据不同的异常进行相应的处理,而不会就此中断我们的生活生活中,我们会根据不同的异常进行相应的处
7、理,而不会就此中断我们的生活/Java内置异常类的结构内置异常类的结构 9ObjectThrowableErrorExceptionClassNotFoundExceptionSQLExceptionRuntimeExceptionNullPointerExceptionArithmeticException/常见的异常类常见的异常类-110异常描述 Exception用户程序可捕捉的异常体系结构的根类RuntimeExceptionjava.lang包中多数异常的基类ArithmeticException算术异常,如除以0IllegalArgumentException方法收到非法参数Arr
8、ayIndexOutOfBoundsException数组下标出界NullPointerException空指针异常(试图访问null对象的引用)SecurityException试图违反安全性InputMismatchException输入不匹配异常ClassNotFoundException不能加载请求的类/常见的异常类常见的异常类-211异常描述 NumberFormatException从字符串到数字格式的非法转换AWTExceptionAWT中的异常IOExceptionI/O异常的根类FileNotFoundException不能找到文件EOFException文件已经结束Ille
9、galAccesException对类的访问被拒绝NoSuchMethodException请求的方法不存在InterruptedException线程中断什么是异常处理什么是异常处理nJava编程语言使用异常处理机制为程序提供了错误处理的能力/程序中预先想好了程序中预先想好了 对付异常的处理办法对付异常的处理办法 异常!异常! 程序运行程序运行处理完毕,程序继续运行处理完毕,程序继续运行对异常进行处理对异常进行处理Java中如何进行异常处理中如何进行异常处理nJava的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws/ 捕获异常捕获异常 cat
10、chtryfinally执行可能产生执行可能产生 异常的代码异常的代码 捕获异常捕获异常 无论是否发生异常,无论是否发生异常,代码总能执行代码总能执行手动抛出异常手动抛出异常 抛出异常抛出异常 throw声明异常声明异常 声明方法可能要声明方法可能要抛出的各种异常抛出的各种异常 throwstry/catch块块7-1n使用try/catch块捕获异常,分为三种情况:/trycatch try/catch 块后的代码段块后的代码段public void method()try / 代码段代码段(此处不会产生异常此处不会产生异常) catch (异常类型异常类型 ex) / 对异常进行处理的代码
11、段对异常进行处理的代码段/ 代码段代码段第一种情况第一种情况 try/catch块块7-2n使用示例模拟第一种情况:/public class Exception 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
12、;case 2: System.out.println(Java编程编程); break;case 3: System.out.println(SQL基础基础); catch (Exception ex) System.out.println(输入不为数字输入不为数字!);System.out.println(欢迎提出建议欢迎提出建议!);输入:输入:2Java编程编程欢迎提出建议欢迎提出建议!控制台输出控制台输出try/catch块块7-3n使用try/catch块捕获异常,分为三种情况:/trycatch异常类型匹配异常类型匹配 try/catch 块后的代码段块后的代码段进入进入catc
13、h块块public void method()try / 代码段代码段 1 / 产生异常的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5第二种情况第二种情况 产生异常对象产生异常对象 程序继续执行程序继续执行异常是一种特殊的对象,异常是一种特殊的对象,类型为类型为java.lang.Exception或其子类或其子类 发生异常发生异常try/catch块块7-4n使用示例模拟第二种情况:/public class Exception public static void main(S
14、tring 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 (Exception ex) System.ou
15、t.println(输入不为数字输入不为数字!); ex.printStackTrace();System.out.println(欢迎提出建议欢迎提出建议!);输入:输入:B输入不为数字输入不为数字!异常堆栈信息异常堆栈信息欢迎提出建议欢迎提出建议!控制台输出控制台输出try/catch块块7-5nprintStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程 /public class Exception1 public static void main(String args) System.out.print(请输入课程代号请输入课程代号(1至至3之间的数字之间的数字):
16、); Scanner in = new Scanner(System.in); try int courseCode = in.nextInt(); /此处代码省略此处代码省略 catch (Exception ex) System.out.println(输入不为数字!输入不为数字!); ex.printStackTrace(); System.out.println(欢迎提出建议欢迎提出建议!); java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:840)at java.util.Scann
17、er.next(Scanner.java:1461)at java.util.Scanner.nextInt(Scanner.java:2091)at java.util.Scanner.nextInt(Scanner.java:2050)at s2jsp.sg.ch05.Exception1.main(Exception1.java:23)异常类型异常类型异常堆栈信息异常堆栈信息在此方法中抛出了异常在此方法中抛出了异常try/catch块块7-6n使用try/catch块捕获异常,分为三种情况:/trycatch异常类型不匹配异常类型不匹配 try/catch 块后的代码段块后的代码段程序中
18、断运行程序中断运行 发生异常发生异常public void method()try / 代码段代码段 1 / 产生异常的代码段产生异常的代码段 2 / 代码段代码段 3 catch (异常类型异常类型 ex) / 对异常进行处理的代码段对异常进行处理的代码段4/ 代码段代码段5第三种情况第三种情况 产生异常对象产生异常对象 try/catch块块7-7n使用示例模拟第三种情况:/public class Exception2 public static void main(String args) System.out.print(请输入课程代号请输入课程代号(1至至3之间的数字之间的数字):
19、);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 (NullPointerException ex) System.out.println(输入不为数字!输入不为数字!);System.out.println
20、(欢迎提出建议!欢迎提出建议!);输入:输入:B程序中断运行程序中断运行try/catch/finally 2-1n在try/catch块后加入finally块,可以确保无论是否发生异常,finally块中的代码总能被执行/try 块块 finally 块块 catch 块块 无异常无异常 有异常有异常 try/catch/finally 2-2 /public class Exception3 public static void main(String args) System.out.print(请输入课程代号请输入课程代号(1至至3之间的数字之间的数字):);Scanner in =
21、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 (Exception ex) System.out.println(输入不为数字!输入不为数字!); finally System.out.println(欢迎提出建议!欢迎提出建议!);
22、输入:输入:2Java编程编程欢迎提出建议欢迎提出建议!控制台输出控制台输出输入:输入:B输入不为数字输入不为数字!欢迎提出建议欢迎提出建议!第一种情况:第一种情况:无异常无异常第二种情况:第二种情况:有异常有异常 小结小结 1n编写一个类ExceptionTest1,在main方法中使用try、catch、finally:在try块中,编写被0除的代码在catch块中,捕获被0除所产生的异常,并且打印异常信息在finally块中,打印一条语句/多重多重catch块块 2-1n一段代码可能会引发多种类型的异常n当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的ca
23、tch语句n执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略 /public void method()try / 代码段代码段 / 产生异常产生异常(异常类型异常类型2) catch (异常类型异常类型1 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型2 ex) / 对异常进行处理的代码段对异常进行处理的代码段 catch (异常类型异常类型3 ex) / 对异常进行处理的代码段对异常进行处理的代码段/ 代码段代码段try 与异常类型与异常类型1不匹配不匹配try/catch 块后的代码段块后的代码段发生异常发生异常产生异常对象
24、产生异常对象catch与异常类型与异常类型2匹配匹配catchcatch程序继续执行程序继续执行进入进入catch块块多重多重catch块块 2-2/public class Exception4 public static void main(String args) Scanner in = new Scanner(System.in);trySystem.out.print(“请输入请输入S1的总学时:的总学时:);int totalTime = in.nextInt(); /总学时总学时System.out.print(“请输入请输入S1的课程数目:的课程数目:);int totalC
25、ourse = in.nextInt(); /课程数目课程数目System.out.println(“S1各课程的平均学时为:各课程的平均学时为: + totalTime / totalCourse); catch (InputMismatchException e1) System.out.println(输入不为数字输入不为数字!); catch (ArithmeticException e2) System.out.println(课程数目不能为零课程数目不能为零!); catch (Exception e) System.out.println(发生错误发生错误:+e.getMessa
26、ge();输入:输入:270 H 在安排在安排catch语句的顺序时,首先应该捕获最特殊的异常,语句的顺序时,首先应该捕获最特殊的异常, 然后再逐渐一般化,即先子类后父类然后再逐渐一般化,即先子类后父类 输出:输出:输入不为数字输入不为数字!进入第一个进入第一个catch块块输入:输入:270 0 输出:输出:课程数目不能为零课程数目不能为零!进入第二个进入第二个catch块块抛出异常抛出异常n属于运行期的异常类型会由Java虚拟机自动抛出,但有些我们自己定义的异常类型,则要通过throw关键字显式抛出。/public class Calc public void div(int a,int
27、b) try if(b0) throw new Exception(“除数不能为负数或除数不能为负数或0!); else System.out .println(a+/+b+=+(a/b); catch (Exception e) System.out.println(e.getMessage(); public class Test public static void main(String args) Calc calc = new Calc(); calc.div(12,0);抛出异常抛出异常捕获异常捕获异常除数不能为除数不能为负数或负数或0 !控制台输出控制台输出声明异常声明异常/p
28、ublic class Calc public void div(int a,int b) throws Exception if(b=0) throw new Exception(除数不能为负数或除数不能为负数或0); else System.out .println(a+/+b+=+(a/b); public class TeacherTest public static void main(String args) Calc calc = new Calc(); try t1.div(12,-3); catch (Exception e) System.out.println(e.getMessage(); 由调用者捕获异常由调用者捕获异常 声明该方法可能会产生异常声明该方法可能会产生异常 声明异常示例声明异常示例/public class AccpTeacher private String id;/ 教员编号教员编号,长度应为长度应为7 public void setId(String pId) throws IllegalAr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合同签署次序与内容
- 学前班口腔教育主题班会
- 阿克苏工业职业技术学院《医学免疫学研究进展》2023-2024学年第二学期期末试卷
- 阿坝师范学院《西方史学史》2023-2024学年第一学期期末试卷
- 阿鲁科尔沁旗2024-2025学年小学六年级第二学期小升初数学试卷含解析
- 陕师大附中2025届中考化学试题原创模拟卷(十)含解析
- 陕西学前师范学院《临床流行病学与循证医学》2023-2024学年第一学期期末试卷
- 陕西工商职业学院《传感器及测试技术》2023-2024学年第二学期期末试卷
- SCI论文写作与投稿 第2版-课件 12-SCI论文表格使用
- 陕西机电职业技术学院《网页艺术设计与制作》2023-2024学年第一学期期末试卷
- 《围术期麻醉管理策略》课件
- 自考《莎士比亚研究》考试复习题库(含答案)
- 急诊超声学知到智慧树章节测试课后答案2024年秋温州医科大学
- 急救与心理技能(视频课)知到智慧树章节测试课后答案2024年秋中南大学
- 全国川教版信息技术八年级下册第二单元第2节《制作文创作品》教学设计设计
- DG-TG08-12-2024 普通中小学建设标准
- 实时数字孪生数据同步技术-深度研究
- Unit 4 History and traditions Project 说课稿 -2024-2025学年高中英语人教版(2019)必修第二册
- 全国河大音像版初中信息技术七年级下册第一章第五节《图文美化》说课稿
- 资产清查与盘点管理制度
- 2025河北石家庄市总工会社会工作招聘230人高频重点提升(共500题)附带答案详解
评论
0/150
提交评论