1、Java高级程序设计高级程序设计第第2章章 异常处理异常处理第2章 异常处理2.1什么是什么是异常异常2.2 处理处理异常异常2.3 自定义异常与自定义异常与throw关键字关键字2.4 throws关键字关键字2.5 Java的内置异常的内置异常本章目标 理解异常及其作用 使用try-catch-finally语句捕获和处理异常 使用throw、throws关键字本章本章任务任务 任务1 识别异常 任务2 处理异常 任务3 自定义百分制分数异常 任务4 使用throws关键字2.1 什么是异常什么是异常任务任务1 识别识别异常异常编程实现整数除法运算:接收用户输入的2个整数,除法运算后输出结
2、果。根据用户的不同输入,可能产生如图所示的不同结果。知识点:异常的概念、异常处理机制知识点:异常的概念、异常处理机制一、异常的概念一、异常的概念程序开发中一般会出现两种问题:第一种,在编译期间被检测出来的错误,我们称之为语法错误,比如关键字拼写错误、语句丢失分号、变量名未定义等。如果程序中存在这类错误,将不能编译通过,不能生成字节码。第二种,没有语法错误编译成功了,但在程序运行期间出现错误,我们称之为运行错误,比如被访问对象没有正常初始化、访问数组元素时下标值超出范围等等。这种运行错误如果没有得到及时的处理,可能会造成程序提前中断、数据遗失乃至系统崩溃等问题。这种运行错误也就是我们所说的运行错
3、误也就是我们所说的“异常异常”。二、异常处理二、异常处理机制机制 为了解决这种需要由程序员承担程序出错情况判断的不正规处理模式所带来的困难和阻碍,Java引入了异常处理机制,通过代码运行到出现错误的时候由系统抛出一个运行时异常,Java程序可以很容易地捕获并处理发生的异常情况。Java的异常类层次结构2.2 处理处理异常异常任务任务2 处理异常处理异常完善任务1中的IntDivide程序,对除法运算中除数为0的异常进行处理,即使用户输入0值不能进行除法运算时也不会再粗鲁地直接中断程序执行了,运行效果如图所示。知识点:知识点:try-catch-finally语句处理语句处理异常异常try/需要
4、监视异常的代码块,该区域如果发生异常就匹配catch来决定程序如何处理catch(异常类型1 异常的变量名1)/处理异常语句组1catch(异常类型2 异常的变量名2)/处理异常语句组2 finally/最终执行的语句组2.3 自定义异常与自定义异常与throw关键字关键字任务任务3 自定义百分制分数异常自定义百分制分数异常编程实现:根据用户输入的分数判定成绩等级并输出。分数规定为百分制,一旦用户输入的分数不符合百分制分数要求,则请用户重新输入,直至输入分数正确,判定等级并输出为止。运行效果如图所示。知识点:自定义异常、知识点:自定义异常、throw关键字关键字一、自定义一、自定义异常异常 /
5、变量、构造方法、成员方法二、二、throw关键字关键字 ;2.4 throws关键字关键字任务任务4 使用使用throws关键字关键字编程实现与任务3相同的根据分数判定等级并输出的功能。代码要求:将根据分数判等级的功能定义为方法,且方法内部不处理分数异常,而是将异常抛出给其调用者来进行处理。知识点:知识点:throws关键字为方法声明关键字为方法声明异常异常方法声明 ,/方法体,抛出异常2.5 Java的内置的内置异常异常在核心语言包java.lang中,Java定义了若干异常类型,其中多数从RuntimeException派生的异常都自动可用,它们不需要通知所有欲调用此方法的方法来检查该异常
6、,因此不需要被包含在任何方法的throws列表中,也可以不用try-catch捕获和处理。Java语言中,这样的异常被称作不受控异常(unchecked exceptions)。还有一些异常类型,它们必须由try-catch进行捕获和处理,或者不用try-catch捕获则应包含在方法声明的throws列表中,由方法的调用者进行捕获和处理,否则编译将不能通过,这样的异常称作受控的异常(checked exceptions)。实训实训任务任务实训 2-1 编写一个User类,类中包含String类型成员变量username和password,在默认构造方法中将username赋值为“admin”,
7、密码赋值为“1234”。定义checkUser(String username,String password)方法,要求当参数username与类成员变量username不相符时抛出自定义异常NoSuchUserException,当用户名正确而password和类成员变量password不相符时抛出自定义异常PasswordDontMatchException。实训实训任务任务实训 2-2 创建帐户类,其中定义存钱、取钱、查询余额等三个方法,并自定义如下异常类型用于账户类:(1)AccountOverdrawnException:当有了这个要取出比帐户上更多的钱的尝试时。(2)InvalidDepositException:当无效钱数(小于0)存入时。