11异常.docx

上传人:b****4 文档编号:5543438 上传时间:2023-05-08 格式:DOCX 页数:14 大小:436.95KB
下载 相关 举报
11异常.docx_第1页
第1页 / 共14页
11异常.docx_第2页
第2页 / 共14页
11异常.docx_第3页
第3页 / 共14页
11异常.docx_第4页
第4页 / 共14页
11异常.docx_第5页
第5页 / 共14页
11异常.docx_第6页
第6页 / 共14页
11异常.docx_第7页
第7页 / 共14页
11异常.docx_第8页
第8页 / 共14页
11异常.docx_第9页
第9页 / 共14页
11异常.docx_第10页
第10页 / 共14页
11异常.docx_第11页
第11页 / 共14页
11异常.docx_第12页
第12页 / 共14页
11异常.docx_第13页
第13页 / 共14页
11异常.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

11异常.docx

《11异常.docx》由会员分享,可在线阅读,更多相关《11异常.docx(14页珍藏版)》请在冰点文库上搜索。

11异常.docx

11异常

第十一天、异常

今日任务

1、什么是异常

2、异常怎么发生的

3、异常的处理

4、异常的作用

5、异常的简单应用

6、自定义异常

7、Java中异常的体系

8、异常的细节

学习目标

了解异常的概念、发生过程和作用

理解Exception和RuntimeException的区别

掌握自定义异常的方法

掌握异常的两种处理方式;

1.Object类简介

1.1.Object类简介

Object,是Java一切对象的最高父类;如果一个类没有显示继承一个类,他的父类就是Object;

它描述的是Java世界里所有对象最最共性的信息,它的类型的变量,可以指代Java中的所有对象,相当于我们生活中说的“东西”这个词;

1.2.equals方法:

equals方法,作用就是比较两个对象是否相等;

生活中的相等性比较:

班长买了个手机;卫挺也买了个手机,然后就有可能比较两个手机是否一样;

比如,手机的品牌、价格、尺寸、外观等等都一样,就可以认为是两个一样的东西;

我们发现直接使用从Object类中继承的equals方法,不能满足我们的需要,然后查看源代码中的实现:

所以需要重写这个equals方法,以满足我们的需求;

一般开发中,都要重写一个对象的equals方法;

1.3.toString方法

根据描述发现,直接从object类继承来的toString方法,也是不符合我们的使用要求的;

我们更希望可以直接输出对象的属性值,所以需要重写toString方法;

2.异常介绍

前面一直在教大家怎么写好一个程序;但是,对于程序中有可能出现的问题,以及出现问题该怎么解决,都没说过;今天,我们就来学习这方面的东西;

2.1.异常的概念

异常:

就是不正常;

生活中的不正常:

生病;电脑突然蓝屏;骑车突然掉链子等等等等……

程序中的不正常:

就是程序不出现我们预期的结果;

Java中的异常:

空指针异常;下标越界异常;类型转换异常……

因为一般程序都要使用第三方数据,或者都有接受客户的输入信息,但是这些第三方数据和客户输入的数据都是不可控的,所以程序中有可能会出现各种异常情况,这是无法避免的;

关键在于,除了问题怎么解决,有没有预备方案;

一个程序的好坏,不在于它不会出现异常,而在于除了异常,也有预备方案,可以继续工作;

要应对程序中可能发生的问题,就要研究程序中异常是怎么发生的;

2.2.异常的发生过程

3.异常的处理

生活中,如果做一件事情,出了意外,一般也是两种处理方式:

要么自己能解决,就自己解决;

自己解决不了,就将问题报告给上一级;

在java程序中,异常的处理也是类似的两种情况:

自己处理不了,就讲问题的信息报告给调用者,叫做异常的声明;

自己能够处理,就自己处理了,叫做异常的捕获;

3.1.异常的声明

异常声明的方法,是使用关键字:

throws;

怎么做呢?

在方法的参数列表后面,大括号前面,使用throws关键字,将程序中可能会出现的问题都写上;

声明之后,在别的函数调用你这个函数时,就知道你可能会有问题发生,就可以提前在函数中做一些相应的处理;

3.2.异常的捕获

在可能会发生异常的代码周围,使用代码块将这里可能会抛出的异常进行捕获,捕获后,JVM抛出的异常就不想函数的调用者传递了,而是可以被我们书写的代码处理;

try{

可能会抛出异常的代码;

}

catch(定义变量,接受可能会捕获到的异常对象){

捕获到异常后,就会执行这里的代码;

}finally{

//表示这里的代码必须会执行到;

}

4.异常的作用

通过上面简单的处理,我们发现,如果不做处理,程序中一旦有点小问题,整个JVM就会停止,程序就会结束运行;

而合理使用异常和异常的处理,就会发现,即使程序中出现了问题,也有预备方案进行解决,程序还可以正常工作;

提高了程序的健壮性(鲁棒性);

程序的健壮性,指的就是程序应对复杂问题还能正常工作的能力;

简单示例:

合理的使用异常,还可以向使用者那个这显示更详细的问题的信息,方便开发和使用者处理问题;

5.自定义异常

问题:

JDK自己提供的异常很全面,根据开发中大多数问题,都有相应的异常类,但是我们使用起来是比较麻烦的;

1、异常类太长,记忆和书写都不方便;

2、异常类很多,开发者不可能都记下来,使用时就很不方便;

为了使用方便,需要我们自己定义异常类;开发者自己定义的异常类,就叫做自定义异常;

5.1.自定义异常

我们要写的异常,不能继承Error类,因为人家表示的是严重的问题,是不应该被程序自己处理的问题;

那么我们写的异常,就应该是继承Exception或者它的子类;

自定义异常类:

总结自定义异常的方法:

首先写一个类,让这个类继承Exception类或者它的子类;

然后给这个类写几个构造函数,写什么构造函数,根据你怎么使用而定;

在这些构造函数中,调用父类构造函数,将传入的参数传给父类;

5.2.异常的体系和分类

编译时异常,指的不是编译期发生的异常,而是编译期编译器会检测事都被处理的异常;

运行时异常,指的是编译期编译器不会检测是否被处理的异常;

这些异常,都是发生在程序运行阶段;

异常的分类:

Throwable:

表示的是Java中所有异常类最最顶层的父类;

|

————Error:

表示程序中发生的严重的问题,不该也不能被程序自己处理问题(一般,一旦发生这种问题,JVM就会挂掉);

|

————Exception:

表示程序中发生的应该被处理的问题;

|

————:

RunTimeException:

表示在编译阶段,编译器不会检查程序中有没有处理代码的异常;

|

————:

其他的子类:

表示的是在编译阶段,编译期会检查程序中有没有处理代码的异常;

结论:

我们自定义异常,一般都要继承Exception(及其子类)或RuntimeException(及其子类)这两个类;

到底要继承哪个,根据需求而定;如果你的异常是必须被处理的,就需要定义成编译时异常;

5.3.自定义异常练习

需求:

描述一个圆,要求使用异常对圆的半径进行检验;半径必须大于0;

代码见CircleTest.java;

6.异常的细节

6.1.throw和throws

这两个关键字的区别:

throw:

用于在程序执行时一旦出现问题,将表示问题的对象抛出的;

用法是:

在后面加上要抛出的记录了异常信息的对象;

throws:

用于异常处理中的声明异常的;

用法:

写在方法的参数列表后面,throws后面跟这个程序可能会抛出的异常的类名;如果有多个异常,需要在之间使用逗号分开

6.2.try、catch、finally的细节

6.2.1.组合

try{

可能会抛出异常的代码

}catch(被捕获的异常对象){

处理的代码

}:

try{

}catch(){

}catch(){

}

……

多catch快时需要注意的问题:

总结:

当使用多个catch快来捕获多个异常时,抛出的异常会根据catch块书写的顺序,从上往下来匹配,所以,

如果要捕获的多个异常有继承关系,那么父类的异常在下面的catch块里捕获,子类的异常应该在上面catch块里捕获;

还可以在前面两种组合后面加上finally块:

finally块中的代码,表示一定会执行;

try{

}catch(){

}finally{

}:

try{

}finally{

}:

总结:

写在finally块中的代码,一定会被执行到;在结束try-catch-finally代码块之前执行;

6.2.2.finally的使用场景

一般在开发中,有些操作是必须执行的,例如关闭连接、释放资源等,这些操作就应该写在finally块中;

一、关键技术点:

1、关键字finally用在try和catch语句之后,表示无论是否发生异常,都会执行finally块中的代码

2、一般情况下,先执行try块,如果有异常再执行catch块,最后才执行finally块,除非try块或者catch块中有跳转语句,如:

return,那么在执行跳转语句之前,finally块中的代码被执行。

因此,finally块中的代码一定会被执行。

3、由于finally块中的代码肯定会执行,所以常常将关闭资源(如关闭文件、数据库连接等)的语句放在fianlly中。

4、不要在finally块中用跳转语句,如return等,因为这会使得try和catch块中的跳转语句失效

二、演示实例

package book.exception;

/**

* try catch finally的用法

* 无论是否发生异常,finally代码块始终都会执行

* @author joe

*

*/

public class Finally {

/**

* 计算平方根

* @param nStr 数字的字符串

* @return 返回平方根

* @throws MyFirstException 当输入字符串为空,或字符串不能转化成数字时,抛出该异常

* @throws MySecondException 当输入字符串转化成的数字为负数时抛出该异常

*/

public static double getSqrt(String nStr) throws MyFirstException, MySecondException {

if (nStr == null) {

throw new MyFirstException("输入的字符串不能为空!

"); }

double n = 0;

6.3.继承中方法重写的异常

子类重写父类方法,不能比父类方法抛出更多异常;

6.3.1.父类方法没有声明异常,子类重写的方法不能声明编译时异常

6.3.2.父类方法声明了一个编译异常,子类重写的方法只能声明这个异常或它的子异常

6.3.3.父类方法声明了多个编译异常,子类重写的方法只能声明这些异常的子集或子集的子类

总结:

子类重写父类方法,不能比父类方法抛出更多异常;

总结:

子类重写父类方法,不能比父类方法抛出更多异常;

总结:

子类重写父类方法,不能比父类方法抛出更多异常;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2