没有合适的资源?快使用搜索试试~ 我知道了~
首页java异常的处理讲解
java异常的处理讲解
需积分: 17 18 下载量 57 浏览量
更新于2023-06-30
收藏 144KB DOC 举报
java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理java异常的处理
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/3377822/bg1.jpg)
第八章 异常处理
8.1 异常概念
在 前 章 节 的 例 题 中 , 只 要 出 现 有 输 入 流 的 地 方 , 都 会 出 现
try、throws、catch 等语句。这些语句功能是什么呢?如果没有这些语句,程序
能否正确运行吗?本章将会详细解答这些问题。
在前面程序编写中,往往简单地认为所有输入的数据都是以正确的形式输入
的、编写的程序代码在运行时永远是正确的、数据处理永不出错……,所以在
程序编写过程中,往往没有考虑如果因为用户输入信息的错误或者程序在处理
信息时由于代码自身缺陷造成的错误等。一个优秀的程序,往往是该程序有一
定的健壮性和容错能力,即当程序处理出现错误时能做到:
通知用户出现了什么错误
保存当前已经完成的所有工作
允许用户安全地退出程序
而不能让计算机轻易出现死机,更不能让计算机出现灾难性的后果。那么如
何让计算机在出现错误的情况下,能继续运行,或安全退出程序。这就需要我
们在编写程序时,预先设置一些错误处理代码,用于当出现错误时做及时的补
救工作。这种在 Java 程序运行时造成的错误,会在系统中引发一个称为异常
(Exception)的对象。
1、 异常处理的基本概念
程序运行中的有些错误是可以预料但不可避免的,如内存空间不足、硬盘上
的文件被移动、打印机未连接好、数组越界、文件找不到等由系统运行环境造
成的错误。这时要力争做到允许用户排除环境的错误,继续运行程序;至少要
给出适当的提示住处。这就是异常处理的任务。
在一个软件中,由于类中各方法之间、类与类之间有着明确的分工和复杂的
相互引用关系,发现错误的方法或类往往没有处理错误的能力。这时它就引发
一个异常,希望它调用者能捕获这个异常并处理这个错误。如果调用者也不能
处理这个错误,还可以继续传递给上级调用者去处理,这种传播会一直传递到
异常被处理为止。如果程序始终没有处理这个异常,最终它会被传到 Java 运行
系统那里,运行系统捕获后通常只是简单地终止这个程序。这会给用户造成一
个十分不好的印象-----软件易出错,即使这种错误是用户输入的数据错误造成
的。在 Java 中,系统提供了一系列异常处理方法。下面简单介绍 Java 处理异常
的过程:
Java 通过面向对象的方法来处理异常。在一个方法运行过程中,如果发生了
异常,则这个方法生成代表该异常的一个对象,并把它交给运行时系统,运行
时系统寻找相应的代码来处理这一异常。我们把生成异常对象并把它交给运行
时系统的过程称为抛出(throw)一个异常。运行时系统在方法的调用栈中查找,
从生成异常的方法开始回溯,直到找到包含相应处理的方法为止,这一过程称
为获。
2、异常分类
![](https://csdnimg.cn/release/download_crawler_static/3377822/bg2.jpg)
在 Java 中,所有的异常都是从 Throwable 类派生而来的一个异常类。在 Java
语言中“错误处理体系”类中,顶层是 Throwable 类,其下有两个直接子类:Error
和 Exception。其中 Error 体系用于描述了 Java 运行时间系统内部出现的错误以
及资源耗尽情况,对于这种由系统自身造成的内部错误,我们基本上是无能为
力处理这些错误,只能力图正常终止程序的运行。当然出现这种情况一般比较
少。Throwable 类的另外一个子类 Exception,是程序运行时可能抛出的异常错
误对象,这些错误是可以通过适当的处理代码来进行干预的,在本章中处理异
常的重点就放在 Exception 体系上。
Exception 下面也有两个分支:“RuntimeException”(运行时间异常)类和“非
RuntimeException”(非运行时)类。其中“RuntimeException”(运行时间异常)
包 括 错 误 的 造 型 ( Cast ) 、 数 组 越 界 访 问 存 取 、 空 指 针 访 问 ; “ 非
RuntimeException”的异常包括试图越过文件尾继续读取、试图打开一个形式错
误的 URL、试图为一个并不表示现有的字串查找 class 对象。Java 编译器要求
Java 程序必须捕获或声明“非 RuntimeException”(非运行时)异常,但运行时异
常可以不做处理。
Java 异常处理体系见图 8-1。
图 8-1 异常处理的体系图
8.2 异常处理
前面介绍了异常的基本概念,本节我们重点介绍 Java 中几种预定义异常,及
其相应处理。
1、预定义异常情况
Java 中对于程序运行中经常出现的一些异常,已经预定义了这些异常类,当
程序执行中碰到这些错误时,它就会抛出相应的异常对象。在 Java 中预定义的
异常见表 8-1。
程序在运行时,系统在程序运行过程中检测到错误,这些错误可能发生在程
Throwable
Object
Error
Exception
RuntimeException
![](https://csdnimg.cn/release/download_crawler_static/3377822/bg3.jpg)
序的任何部位,而且数量可能很大,因此 Java 编译器允许程序可以不对它进行
处理,这时 Java 运行时系统会把生成运行时异常对象交给默认的异常处理程序,
默认处理程序仅是在标准输出上显示异常的内容以及发生的异常位置并关闭程
序的运行。如例 8-1。
表 8-1 Java 中部分预定义常用异常类
异常名称 产生异常的原因
ArithmeticException
程序试图除 0
NullPointerException
程序试图访问一个空对象
ArryIndexOutOfBoundsException
程序试图访问数组范围外的元素
ClassCastException
将不同类对象进行类型转换
NegativeArraySizeException
定义的数组长度为负数
ArrayStoreException
程序试图存储数组中错误的类型数据
FileNotFoundException
程序访问不存在的文件
IOException
由于一般 I/O 故障,如输入流的读方法
NumberFormatException
字符串转换为相应数据量失败
OutOfMemoryException
没有足够内存来分配新对象
SecurityException
Applet 程序试图执行安全设置不允许的操作
StackOverflowException
系统的堆栈空间用完
StringIndexOutOfBoundsExceptio
n
程序试图访问字符串中不存在的字符位置
例 8-1 程序运行时产生的异常及默认处理
⑴ class testDefaultDealwithException
⑵ {
⑶ public static void main(String args[])
⑷ {
⑸ System.out.println("测试程序运行情况:");
⑹ int array[]=new int[2];
⑺ array[3]=13;
⑻ System.out.print("此句执行了吗?");
⑼ }
⑽ }
程序运行的结果见图 8-2。
图 8-2 程序产生异常及默认处理
指出了产生异
常的文件名及
其发生的位置
指出了异常
的类型名
![](https://csdnimg.cn/release/download_crawler_static/3377822/bg4.jpg)
从例 8-1 程序代码来看,程序中第 7 行代码(黑体部分)访问的范围超出了数
组的定义范围,因第 6 行定义的数组中只有 2 个元素,即 array[0]、array[1],而
程序的第 7 行访问的是 array[3],超出数组的边界,产生了运行错误,即所谓的
异常。
从图 8-2 可以看出程序执行的情况:在发生异常之前,所有程序代码都被
正常执行。如第 5 句执行的结果就在屏幕上显示出来,而产生异常语句之后的
所有语句都未被执行,如图 8-2 中未显示第 8 句输出的语句。在图 8-2 中,我们
还可以看到默认处理异常的程序将所产生的异常类及异常的位置指出来了。
注意,有些异常是当程序在编译时被发现的。不论程序在什么时候发生了
异常,程序都会将异常抛出来,如果程序自身没有相应的异常处理专门代码的
话,Java 将会将异常传给异常默认处理程序,即将产生的异常类及异常产生的
位置等信息抛出来后,停止程序执行。
下面将常用的几个预定义异常简单进行介绍:
① ArithmeticException
当程序试图除 0,或用 0 取模时,就会产生 ArithmeticException,其它运行
操作不会产生异常。例如下面代码就会引发 ArithmeticException 异常。
Class arithmeticException
{
public static void main(String args[])
{
int zero=0;
int value;
value=5/zero;
}
}
② NullPointerException
当程序试图访问一个空对象中的变量或方法、一个空数组中的元素时则引
发 NullPointerException。即作用没有为其分配内存的对象、调用 null 对象的方
法或变量、访问未分配空间的数组元素、访问 null 数组的元素。如下代码会产
生 NullPointerException 异常。
Class nullPointerException
{
public static void main(String args[])
{
int zeroLengthArray[]=null;
zeroLengthArray[5]=90;
}
}
③ ArrayIndexOutOFBoundsException
当程序访问数组元素时,给出的下标超出了数组引用范围或者说程序企图
剩余19页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/7ef2c44f24ef49a1adf252d5017491ce_zhengyuqing52306.jpg!1)
zhengyuqing52306
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 京瓷TASKalfa系列维修手册:安全与操作指南
- 小波变换在视频压缩中的应用
- Microsoft OfficeXP详解:WordXP、ExcelXP和PowerPointXP
- 雀巢在线媒介投放策划:门户网站与广告效果分析
- 用友NC-V56供应链功能升级详解(84页)
- 计算机病毒与防御策略探索
- 企业网NAT技术实践:2022年部署互联网出口策略
- 软件测试面试必备:概念、原则与常见问题解析
- 2022年Windows IIS服务器内外网配置详解与Serv-U FTP服务器安装
- 中国联通:企业级ICT转型与创新实践
- C#图形图像编程深入解析:GDI+与多媒体应用
- Xilinx AXI Interconnect v2.1用户指南
- DIY编程电缆全攻略:接口类型与自制指南
- 电脑维护与硬盘数据恢复指南
- 计算机网络技术专业剖析:人才培养与改革
- 量化多因子指数增强策略:微观视角的实证分析
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)