第十章异常ppt课件

上传人:我*** 文档编号:148658722 上传时间:2020-10-21 格式:PPTX 页数:31 大小:250.27KB
返回 下载 相关 举报
第十章异常ppt课件_第1页
第1页 / 共31页
第十章异常ppt课件_第2页
第2页 / 共31页
第十章异常ppt课件_第3页
第3页 / 共31页
第十章异常ppt课件_第4页
第4页 / 共31页
第十章异常ppt课件_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《第十章异常ppt课件》由会员分享,可在线阅读,更多相关《第十章异常ppt课件(31页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计,基于Java语言的面向对象程序设计,第二部分,Java面向对象编程,Java程序设计,回顾,简述抽象类和接口的应用场合 面向接口编程的好处是什么?,提问,第十章 异常,第一节 什么是异常,Java程序设计,生活中的异常,正常情况下,小王每日开车去上班,耗时大约30分钟,但是,异常情况迟早要发生!,一路畅通,堵车!,撞车!,程序中的异常,以下程序运行时会出现错误吗?,public class Test1 public static void main(String args) Scanner in = new Scanner(System.in); System.out.pri

2、nt(请输入被除数:); int num1 = in.nextInt(); System.out.print(请输入除数:); int num2 = in.nextInt(); System.out.println(String.format(%d / %d = %d, num1, num2, num1/ num2); System.out.println(感谢使用本程序!); ,代码阅读,避免异常 1,如何解决该问题呢?,public class Test2 public static void main(String args) Scanner in = new Scanner(Syste

3、m.in); System.out.print(请输入除数:); int num2 = 0; if (in.hasNextInt() / 如果输入的除数是整数 num2 = in.nextInt(); else / 如果输入的除数不是整数 System.err.println(输入的除数不是整数,程序退出。); System.exit(1); ,尝试通过if-else来避免异常问题,无法处理所有情况,避免异常 2,如何解决该问题呢?,public class Test2 public static void main(String args) Scanner in = new Scanner(

4、System.in); System.out.print(请输入除数:); int num2 = 0; if (in.hasNextInt() / 如果输入的除数是整数 num2 = in.nextInt(); if (0 = num2) / 如果输入的除数是0 System.err.println(输入的除数是0,程序退出。); System.exit(1); else / 如果输入的除数不是整数 System.err.println(输入的除数不是整数,程序退出。); System.exit(1); ,尝试通过if-else来避免异常问题,弊端: 1、代码臃肿 2、程序员要花很大精力“堵漏

5、洞” 3、程序员很难堵住所有“漏洞”,使用异常机制,什么是异常,异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序 例如:,异常,程序运行,程序中断运行,请输入整数,用户输入字母 程序无法解析,程序中断运行,请输入整数,用户输入数字,程序中断运行,计算除法,除数为0,生活中的异常处理,绕行或者等待,请求交警解决,生活中面对异常通常会这样处理,堵车!,撞车!,生活中,根据不同的异常进行相应的处理,而不会就此中断我们的生活,程序中的异常处理,Java编程语言使用异常处理机制为程序提供了错误处理的能力,程序中预先设置好 对付异常的处理办法,异常,程序运行,处理完毕,程序继续运行,

6、对异常进行处理,Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws,Java中如何进行异常处理,捕获异常,catch,try,finally,执行可能产生 异常的代码,捕获异常,无论是否发生异常, 代码总能执行,手动抛出异常,throw,声明方法可能要 抛出的各种异常,throws,声明异常,抛出异常,第十章 异常,第二节 异常处理(trycatch),Java程序设计,使用try-catch块捕获异常,分为三种情况:,try,catch,try-catch 块后的代码段,public void method() try / 代码段(此处

7、不会产生异常) catch (异常类型 ex) / 对异常进行处理的代码段 / 代码段 ,try-catch块 1,第一种情况 :正常,使用try-catch块捕获异常,分为三种情况:,try,异常类型 匹配,try-catch 块后 的代码段,进入catch块,public void method() try / 代码段 1 / 产生异常的代码段 2 / 代码段 3 catch (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,try-catch块 2,第二种情况:出现异常,产生异常 对象,程序继续执行,异常是一种特殊的对象,类型为 java.lang.Exception或其

8、子类,发生异常,catch,try-catch块 3,printStackTrace的堆栈跟踪功能显示出程序运行到当前类的执行流程,java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:840) at java.util.Scanner.next(Scanner.java:1461) at java.util.Scanner.nextInt(Scanner.java:2091) at java.util.Scanner.nextInt(Scanner.java:2050) at cn.jbit.e

9、xception.Test3.main(Test3.java:15),异常类型,异常堆栈信息,在此方法中抛出了异常,出现异常的位置,使用try-catch块捕获异常,分为三种情况:,try,catch,异常类型 不匹配,try-catch 块后 的代码段,程序中 断运行,发生异常,public void method() try / 代码段 1 / 产生异常的代码段 2 / 代码段 3 catch (异常类型 ex) / 对异常进行处理的代码段4 / 代码段5 ,try-catch块 4,第三种情况:异常类型不匹配,产生异常 对象,异常类型没有匹配,相当于并没有处理异常,在catch块中处理异

10、常 加入用户自定义处理信息 调用方法输出异常信息 异常对象常用的方法,try-catch块 5,e.printStackTrace();,System.err.println(出现错误:被除数和除数必须是整数, ” +除数不能为零。);,常见的异常类型,第十章 异常,第三节 异常处理(trycatchfinally),Java程序设计,try-catch-finally 1,在try-catch块后加入finally块 是否发生异常都执行 不执行的唯一情况,try 块,finally 块,catch 块,无异常,有异常,System.exit(1),中断程序,退出Java虚拟机,try-cat

11、ch-finally 2,存在return的try-catch-finally块,try,catch return,异常类型 匹配,发生异常,public void method() try / 代码段 1 / 产生异常的代码段 2 catch (异常类型 ex) / 对异常进行处理的代码段3 return; finally / 代码段 4 ,产生异常 对象,finally,进入catch块,执行return退出 方法,执行finally块,try块中有return语句执行过程与此类似,2,1,3,4,引发多种类型的异常 排列catch 语句的顺序:先子类后父类 发生异常时按顺序逐个匹配 只执

12、行第一个与异常类型匹配的catch语句,public void method() try / 代码段 / 产生异常(异常类型2) catch (异常类型1 ex) / 对异常进行处理的代码段 catch (异常类型2 ex) / 对异常进行处理的代码段 catch (异常类型3 ex) / 对异常进行处理的代码段 / 代码段 ,多重catch块,try,与异常类型1不匹配,try-catch 块后的代码段,发生异常,产生异常对象,catch,与异常类型2匹配,catch,catch,程序继续执行,进入catch块,思考,面试题:try-catch块中存在return语句,是否还执行finall

13、y块,如果执行,说出执行顺序 try-catch- finally块中, finally块唯一不执行的情况是什么?,提问,第十章 异常,第四节 异常的声明和产生,Java程序设计,声明异常,我怎么知道我调用的函数会有哪些异常产生?,提问,throws声明某个方法可能抛出的各种异常,public class Test7 public static void divide() throws Exception /可能出现异常的代码 public static void main(String args) try divide(); catch (Exception e) e.printStackT

14、race(); /public static void main(String args) throws Exception / divide(); / ,声明异常,多个 异常用逗号隔开,方式2:调用者 继续声明异常,方式1:调用者 处理异常,main方法声明的异常 由Java虚拟机处理,抛出异常,除了系统自动抛出异常外,有些问题需要程序员自行抛出异常,public class Person private String name = ; / 姓名 private int age = 0; / 年龄 private String sex = 男; / 性别 public void setSex

15、(String sex) throws Exception if (男.equals(sex) | 女.equals(sex) this.sex = sex; else throw new Exception(“性别必须是男或者女!); ,抛出异常,Checked和Unchecked异常,观察以下两组代码 为什么有的异常一定需要catch,有的却不用?,Class.forName();,Integer.parseInt(123);,Java当中Checked异常是必须catch并处理的,而unchecked异常不强制要求程序员处理,在处理checked异常的catch语句中,不要什么都不做,不

16、要直接catch Exception,这样会处理所有的异常包括checked和unchecked,异常的分类原理,仅靠程序本身无法 恢复的严重错误,Exception和 Error类的父类,由Java应用程序 抛出和处理的非严重错误,运行时异常,不要求 程序必须做出处理,Checked异常,程序 必须处理该类异常,小结,面试题:说出5个常见的运行时异常 throw与throws的区别是什么?,提问,总结,异常分为Checked异常和运行时异常 Checked异常必须捕获或者声明抛出 运行时异常不要求必须捕获或者声明抛出 try-catch-finally中存在return语句的执行顺序 finally块中语句不执行的情况 throw和throws关键字的区别,

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

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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