基于工作过程的Java程序设计--第5章 Java异常处理
基于JAVA的异常处理及应用
Jv aa中使 用 异 常 类 及 其 子类 对 程 序 出 现 的 各种 异 常 事 件 给 出 了 一个 统 一 的 、 单 的 抛 出 错 误 和 处 理 错 误 的 机 制 . 以概 括 简 可 为 以 下几 个 过 程 : ( ) Jv 1在 aa程 序 的 执 行 过 程 中 , 果 出现 了 一 个 可 识 别 的 如
1 言 .引
31处 理 机 制 .
异 常 是 在 程序 运 行 过 程 中发 生 的 非 正 常 事件 比如: 零 溢 除
出、 组越界、 数 内存 溢 出 等 。 这些 事件 的 发 生将 阻 止 程序 的 正 常 运 行 。为 了 加 强 程 序 的 健 壮 性 , 序 设 计 时 , 须 考 虑 到 可 能 发 程 必 生 的 异 常 事件 并 做 相 应 的 处 理 传 统 的 错 误 处 理 方 法 一 般 以判 断 返 回 值 的 方 式 处 理 错 误 f , 得 正 常 程 序 代 码 和错 误 代 码 混 合 在 一 起 , 程 序 维 护 带 来 1使 1 给 很 大 的障 碍 。aa通过 面 向对 象 的 方 法 进 行 异 常处 理 . Jv 把各 种 不 同 的 异常 进 行 分类 。 有 良好 的 层 次 性 。 种 异 常 处 理 机 制能 将 据 这 处 理 错误 异 常 的 代 码 和 ” 规 ” 码 分 开 . 程 序 维 护起 来 更 加 常 代 使 方 便 。 时也 增 强 了程 序 的 安 全 性 和健 壮 性 。 同 和 Jy 语 言 的 其 它特 性 相 比 . 常 处 理 显 得 深 奥 且 不 易 掌 aa 异 握 。 因为 它 和 Jv aa运 行 时 系 统 密 切 相 关 。 文 着 重 就 Jv 语 言 本 aa 的异 常 处 理 机 制及 在程 序 设 计 中 的 应 用 作一 个 初 步 的 探 讨 。 2 异 常 类 的 结构 及 组 成 . Jy aa中的 T mw be 抛 出 ) 是 一 个 专 门处 理 异 常 的 类 。它 h a l( 类 派 生 了两 个 子类 :r r 出错 ) 和 E cp o ( 常 ) f1 r Er ( o 类 xet n 异 i 类 2。Er o 类 对 象 是 由 Jv 虚 拟 机生 成 并 抛 出给 系 统 。通 常 , v aa J a程 序 不 a 对错误进 行处  ̄[ ;xe tn类对象是 Jv 3 E cpi ] o aa程序抛 出和处 理的 对 象 。 它 又 分 为 R n m E cp o ( 行 期 间异 常 )A ) u t e xet n 运 i i 、 WTE【 . cp o ( WT异 常 ) 1 xe t n 输 入 输 出异 常 ) 这 三 种 子 etnA i 和 0 E cp o ( i , 类 分 别 对 应 于不 同类 型 的 异 常 。 另外 , 户 根据 需 要 可 以 自己 定 用 义异常类。
第五章—异常处理
王卓峥 wangzhuozheng@
1
异常处理
异常的概念 异常处理方法 自定义异常类
2
异常的概念
概念:在程序运行时打断正常程序流程的任 何不正常的情况称为错误或异常
出现异常
试图打开的文件不存在 网络连接中断 操作符越界 加载的类找不到
[举例] P159 例6-2
6
将方法中产生的异常抛出
声明异常
returnType methodName([paramList]) throws exceptionList
exceptionList可包含多个异常类型,用逗号隔 开
适用场合
方法中调用了抛出异常的方法 方法体中生成并抛出异常对象 P163
[举例] P163 例6-5
7
自定义异常类
何时自定义异常类
Java异常类体系中不包含所需的异常类型 用户需要将自己所提供类的异常与其他人提供
类的异常进行区分 类中将多次抛出这种类型的异常 如果使用其它程序包中定义的异常类,将影响
程序包的独立性与子包含性
[举例] P167 例6-6
8
作业:2、4、5(编程验证)
9
[举例] P155 例6-1
3
异常类层次
P156 Error与Exception
不可恢复与可恢复 不可处理与可处理
4
异常处理方法
捕获并处理异常
好像trap try-catch-finally
将方法产生的异常抛出
好像transfer methodDeclaration throws Exception
5
捕获并处理异常
try-catcBiblioteka -finally语句try{ java statements;
java中的异常处理机制的简单原理和应用
Java中的异常处理机制的简单原理和应用异常处理机制简介在Java中,异常处理机制是一种用于处理程序运行时出现错误和意外情况的机制。
异常是指在程序的执行过程中发生的错误或非正常情况,如无效的输入、文件不存在等。
使用异常处理机制,我们可以捕获并处理这些异常,从而保证程序的稳定性和可靠性。
异常处理机制主要包括以下几个方面的内容:1.异常类:Java提供了一系列异常类来表示不同类型的异常,比如NullPointerException、ArrayIndexOutOfBoundsException等。
每个异常类都是Throwable类的子类。
2.异常处理语句:使用try-catch语句块来捕获和处理异常。
try块中包含可能发生异常的代码,而catch块则用于捕获并处理异常。
3.异常处理方式:可以通过不同的方式来处理异常,比如忽略异常、打印异常信息、重新抛出异常等。
4.异常处理的层次结构:所有异常类都是Throwable类的子类,Throwable类又分为Error和Exception两个子类。
Error表示严重的错误,如虚拟机错误,一般不予处理;Exception则表示一般的异常情况,可以通过异常处理机制来处理。
异常处理机制的应用Java中的异常处理机制广泛应用于各种类型的程序中,下面是一些常见的应用场景:1. 文件操作在进行文件操作时,如打开文件、读取文件等,往往会遇到文件不存在、文件格式错误等异常情况。
通过使用异常处理机制,可以捕获并处理这些异常,提供友好的错误提示,避免程序崩溃。
```java try { FileReader fileReader = new FileReader(。
JAVA教程(程序异常处理)(精)
程序异常处理引子O在调试航班体息录入程冲•时.町能会遇到这歼的情爲:应用程斤运行过程中.突然中止,屛棗上出现一丸堆英丈让人不知所培・o崔许多域市.很行ATM机随处可见,取歇非常方使•崔ATM机上取欲必须扶輒一定钓步裝携作.若挨作出会相应的災示传息.指导你下一步地楼作.比如密码输入错谖.ATM机将会显示诗码输入错谋・请重新输入”的消息•如是三次密碣伦入梆有谋.則呑卡没商量.o尢论什么斥因引起的程斤运行不正常.都认为是悝序出现了并常.知识要点。
异常的概念。
常见的异常情况。
异常处理的机制◎利用try catch finally实现异常处理o利用thro灵throws创建用户自定义异常知识学习一异常概念。
异常一血巾把程序运行中可能遇到的错罠分为两类.一类是非致命的.的过某种修正后程号还能键续执行.这类捲谖称为异常.边是一类特殊的运行错误対象. 另一类是致命的.即程序遇到了非常严重的不正常状态,不能简单地恢复轨行,这就是钳渓.叩异常类基类throwablcift生出两个子类:Error类:定义了Java程序运行时出现了灾难性失败的畀常.一股来说java程序不捕获也不拋出^Error的对象(包把动态磁接失败.虛拟机错逞等)•而只处理Except ion类的各子类对Exception类:定义了程序可以捕捉到的异常。
异営分两类:1)条统定义的2)用户定义的;・:・异常处理一对于异常,Java使用一种错误捕获方法进行) 处理,称为异常处理. 1斗处理异常的两种方式-是将异常交田Jam异常处理机制的预设处理方法来处理。
二是利用Java提供的try-cat ch-final ly语句对于㊁能出现的异常作预先处理。
"融辜习一程序运行的错误类型及位置识学习程序ArithmeticException 算术异常整数除法中,如果除数为0,则发生该类井常.Java虛拟机遇到这样的错i昊时会中止程序的执行流程,并新建~个ArithmeticException类的对象.即拋出一个算术运算异常.例如下面的程序将引发ArithmeticException异常:public class Test ArithmeticExceptionfpublic static void main(String args[])(int denominator=0,numerator=20jesult=0;resultanumerator/denominator;〃除数为0,将引发ArithmeticException异席System.out.prlntln(result);知识学习一程序运行的错误类型及位置NullPointerExcept ion异常发生的原因.通常是由于应用程序企图在某个需要的对鮫上使用mil I值。
java异常处理三原则-概述说明以及解释
java异常处理三原则-概述说明以及解释1.引言1.1 概述在软件开发过程中,异常处理是一个至关重要的话题。
在编写Java程序时,我们经常会遇到各种异常情况,如空指针异常、数组越界异常等。
良好的异常处理能够帮助我们更好地定位和解决问题,提高程序的稳定性和可维护性。
本文将介绍Java异常处理的三个原则,分别是捕获精准异常、处理异常逻辑清晰、抛出异常合理化。
通过遵循这三个原则,我们可以更好地处理异常情况,提高代码的健壮性和可读性。
在接下来的章节中,我们将详细解释每个原则的含义和实践方法,并探讨异常处理在软件开发中的重要性和未来发展趋势。
希望本文能够帮助读者更好地理解和运用Java异常处理的技巧,提升自身的编程水平。
1.2 文章结构本文将按照以下结构展开讨论java异常处理的三原则。
首先,我们将在引言部分概述异常处理的重要性和必要性。
随后,我们将详细介绍三条异常处理原则,即捕获精准异常、处理异常逻辑清晰、抛出异常合理化。
每一条原则都将以具体例子和代码来说明其重要性和实际应用。
最后,在结论部分将总结三个原则的重要性,并探讨未来异常处理的发展趋势和应用前景。
整篇文章将帮助读者更好地理解和应用java异常处理的三原则。
1.3 目的:在编写Java程序时,异常处理是非常重要的一部分。
异常处理可以帮助我们及时发现程序运行中的问题,并且通过合理的处理方式保证程序的稳定性和可靠性。
本文的主要目的是介绍Java异常处理的三大原则,帮助读者了解如何正确地处理异常,提高程序的质量和可维护性。
通过学习和遵循这三大原则,可以使我们的代码更加健壮,减少程序出错的可能性,提高代码的可读性和可维护性。
希望读者能够通过本文的学习,掌握Java 异常处理的核心概念,为自己的编程技能提升一个新的高度。
2.正文2.1 第一原则- 捕获精准异常在Java异常处理中,第一原则是捕获精准异常。
这意味着在代码中应该尽可能精确地捕获并处理异常,而不是简单地捕获所有异常或者把所有异常都抛出去。
Java异常处理技术及应用
浅谈Java异常处理技术及应用摘要:随着系统规模的不断扩大,传统的异常处理技术已经成为创建大型可维护程序的障碍了。
java是一种面向对象的程序设计语言,java的异常处理非常出色。
java把异常封装到类里,运用“try/catch/finally”异常处理机制,最终得到的是更为“健壮”的异常处理代码。
关键字:异常处理 java应用一、前言异常是在程序运行过程中发生的非正常事件。
比如:除零溢出、数组越界、内存溢出等。
这些事件的发生将阻止程序的正常运行。
为了加强程序的健壮性,程序设计时,必须考虑到可能发生的异常事件并做相应的处理。
传统的错误处理方法一般以判断返回值的方式处理错误,使得正常程序代码和错误代码混合在一起,给程序维护带来很大的障碍。
java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,据有良好的层次性。
这种异常处理机制能将处理错误异常的代码和“常规”代码分开,使程序维护起来更加方便,同时也增强了程序的安全性和健壮性。
和java语言的其它特性相比,异常处理显得深奥且不易掌握。
因为它和java运行时系统密切相关,本文着重就java语言的异常处理机制及在程序设计中的应用作一个初步的探讨。
二、异常类的结构及组成java中的throwable(抛出)类是一个专门处理异常的类。
它派生了两个子类:error(出错)类和exception(异常)类。
error 类对象是由java虚拟机生成并抛出给系统。
通常,java 程序不对错误进行处理;exception 类对象是java程序抛出和处理的对象。
它又分为runtimeexception(运行期间异常)、awt ex-ception(awt 异常)和io exception(输入输出异常),这三种子类分别对应于不同类型的异常。
另外,用户根据需要可以自己定义异常类。
三、异常的处理1、处理机制java 中使用异常类及其子类对程序出现的各种异常事件给出了一个统一的、简单的抛出错误和处理错误的机制,可以概括为以下几个过程:(1)在java程序的执行过程中,如果出现了一个可识别的的错误,则会生成一个与该错误相对应的异常类对象,该对象将被提交给运行时的系统,这个过程称为抛出(throw)异常。
简述java中异常处理机制的流程。
Java是一种面向对象的编程语言,所以在编写Java程序时需要考虑异常处理。
异常是指在程序运行过程中出现的错误、故障或意外情况,而异常处理机制则是为了保证程序在遇到异常时能够正确、有效地进行处理,确保程序的稳定性和安全性。
1. 异常的分类在Java中,异常分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
受检异常是指在编译期就能够被检测到的异常,需要进行显式的处理;非受检异常则是指在运行期才能被检测到的异常,通常是由程序错误造成的,需要进行相应的处理。
2. 异常处理机制的流程在Java中,异常处理机制主要涉及到try、catch、finally和throw关键字的使用。
(1) try块:在try块中编写可能会引发异常的代码。
如果在try块中出现了异常,程序会立即跳转到catch块进行相应的异常处理。
(2) catch块:在catch块中定义对异常的处理逻辑。
在catch块中可以针对不同类型的异常编写不同的处理代码,也可以进行异常的记录、打印或其他操作。
(3) finally块:finally块中的代码无论是否出现异常都会被执行。
通常在finally块中释放资源、关闭文件等清理工作。
(4) throw关键字:throw关键字用于手动抛出一个异常。
当程序中的某个条件不满足时,可以使用throw关键字抛出一个异常,然后交由catch块进行处理。
3. 异常处理机制的应用在实际的Java编程中,异常处理机制是非常重要的。
通过合理地编写异常处理代码,可以提高程序的容错性和稳定性,保证程序在面对异常时能够优雅地处理并继续执行。
另外,Java中还提供了一些与异常相关的类,例如Throwable、Exception和RuntimeException等,开发人员可以根据实际需求选择合适的异常类来进行处理。
异常处理机制是Java程序设计中不可或缺的重要部分,合理并且规范地使用异常处理机制能够提高程序的可靠性和稳定性,也能让程序更加健壮。
基于JAVA常见异常处理研究
虚拟机 错误、装载错误 、动态 连接错误 、G I实时系统 的严重 的子类 )以外 的所有异常都称作必检异常 ,必检异 常是指编译 U
错误 ,这类错误很少发 生,如果发生 ,除 了通知用户 以及尽量
稳 妥地 结束程序 以外 , 乎什 么也不能做 。究其原因,与 电脑 用 t y c t h J v 几 r — a c , a a语言不允许编写捕获或者声 明免检异 常的 x e to 的硬件及运 行系统有关 ,大多跟程序 的编写 并无 关系 ,所 以, 代码 。所 以在程序 中如果想通过方法来 引发 E c p in或除
一
、
前言
言 。在编程 的时候 ,如果有应对程序异常 的机制 ,编程就可减 少 错误代码 所造成 的损 失 。本文 提供 了处理异常 的机 制及 原
则 ,可 给 编 程 人 员 减 少 大量 的 工 作 。
Trw h o :通常情况下 ,异 常捕 捉的实现 都是靠系统来完成 的,在 实际编 程中也可以通过 tr w语句来跑 出异常 。t r w ho ho 语句 的格式 为:t rwn w异 常类 名 ( h o e 信息) 。其中异常类名为
类 。E r r类 由 J v ro a a虚 拟 机 抛 出 , 描 述 内部 的系 统 错 误 ,如
ቤተ መጻሕፍቲ ባይዱ
来处理该异常 。T r w h o s还有一个重要 的功 能,就是标} 方法 } j 中的所有异常 。R n i eE cp in r o 以及它们 的子类 u t m x e t o 、E r r 都称为免检异 常。除 R n i e E c p in r o 包括 它们 u tm x e t o 、E r r( 器会强制编程人员检查异常并处理这些异 常。 为避免过 多地使
基于Java的异常处理技术
cpi e t n等均是常见 的检 查型异常 。 o Jv a a类库包含 了许 多有 用的异 常 类 , 使得 程序 员
可以把更 多的 时间花在 程序 设计上 。同时 , aa允 Jv
许程序 员 自定 义异 常类 , 用来处理 应 用程序 中特定 的 逻辑运行错误 , 自定义异 常类必须 继承现有 的异常 类。
的应用作一个全面深入的探讨。
t n等都是 常见 的非检 查型异 常 。 i o Ec po xe t n及其除 R ni Ec po i u t xe t n家族 以外 的所 me i
2 异常类结构 与组成
为 了能够识别并 处理程序 中的运行 错误 , v J a引 a
有子 类都是 检 查型 异 常 ( h ce x e t n : c e kd ec pi ) 它是 一 o
种编译 器必须 检查一个方法是 否处理 或指定 向上抛 出
的异 常 , 是在 Jv a a运 行 时 系统 外 的代 码 中发 生 的异 常, 如果 一个方 法没有 处理或 指定 向上抛 出可 能发 生 的检 查型异常 , 那么该方法就不 能通 过编译 器的编译 。
Ca s to n Ec pin Fe t u d c pin、 1 x ls NoF u d x e t 、 i NoF n E e t o l o x o 0E—
A ryn e OuOfo n s xe t n、 mb ro maEc p r ld x t B u d Ec pi a o Nu eF r tx e —
理错误 , 使得 正常程序代码和错误代码混合 在一起 , 给
程序 维护带来 了很 大的障碍。Jv a a通过面向对象的方 法进行 异常处理 , 把各种不同的异常进行分 类 , 有 良 具
Java语言的异常处理设计
{ 报 错 ;处 理 错 误 ; 关 闭该 文 件 的输 入 流 ; i 关 闭 失 败 ) f 报错 ;处 理 错 f( 误 ;} es { l e
… …
12异 常 的 层次 结 构 .
1.3 异 常 类 的 处 理 方 法 Java 的 异 常 处 理 是 通 过 5个 关 键 词 来 实 现 的 : t 、Cat 、 Y Ch r
维普资讯
J va a
语言的异常处理 设计
秦 琴 广 东科 学技 术职业 学院管理科学 系 5 60 1 4 0
}
文章介 绍 了面向对 象 J a语 言 中异 常处理 V a 的 基 本 思 想 , 异 常 处理 的 相 关语 句 的 使 用
il 笔 常舒娄
{ 报错 。处理错误 ;} es {从输入流中读入一个字 l e
符 ;
3 发生异步 异常 ,可能 的原因有 : )
i 读 操 作 失败 ) f( 线 程 调 用 了 so t p方 法 ;J VM 内部 发 生错
误 。
Exc p i n) 和 运 行 期 异 常 ( ntm e e t0 Ru i
方法及它的具体实现。
异 常 信息 ,调 用这 个对 象的 方法 可以 捕 获 到这 个异常 并进 行处理 。 T r wa l类有两个标准子类:a a h o be jv .
/ /其 他 操 作 1n E r r Na a 1n E cpin [ 误 a g. ro  ̄ jv . g.x e t  ̄错 a o 1
} }
… …
l
异 1 ;类 ; 异 常 抛 出 ;捕 获 l r
T i 8'il nrdc s h b s tog t ad h h J ce toue te ai hu hs n te s t I c
第5章异常处理
第5章异常处理5-1 程序中的错误有哪几种?分别能够在什么时刻被发现?【答】程序错误按照性质可分为3类:语法错、语义错、逻辑错。
1 语法错:违反语法规范的错误成为语法错( syntax error ),这类错误通常在编译时发现,又称为编译错,如标识符未声明、表达式中运算符与操作数类型不兼容、变量赋值时的类型与声明时的类型不匹配、括号不匹配、语句末缺少分号等。
2 语义错:如果在程序的语法上正确,但在语义上存在错误,则称为语义错(semantic error),又称为运行错(run-time error),语义错不能被编译系统发现,只有到程序运行时才能被发现,如输入数据格式错、除数为0错、给变量赋予超出其范围的值错等。
3 逻辑错:如果程序通过编译,可运行,但运行结果与期望值不符,则这类错误称为逻辑错(logic error),例如,由于循环条件不正确而没有结果,循环次数不对等因素导致计算结果不正确等。
5-2Java为什么要采用异常处理机制?Java的异常处理是怎样实现的?异常处理机制能够解决程序中遇到的所有错误吗?哪些错误不是异常处理能够解决的?【答】异常处理和捕获和处理运行时错误的一种机制。
异常处理机制使程序具有处理错误的能力。
即使发生了运行错,应用程序能够捕获异常并及时处理异常,使程序从运行错误中很好地恢复并继续运行,而不会导致程序运行非正常终止。
而且如果当前方法没有能力处理异常,还可以将异常转交给调用者处理。
异常处理机制将运行时错误封装成若干错误类和异常类,并提供异常处理语句用于处理在程序中实现对运行时错误的发现和及时处理。
异常处理机制并不能解决程序中的所有错误,例如内存溢出、栈溢出等。
5-3请说出5个Java的异常类。
【答】算术异常ArithmeticException、空对象异常NullPointerException、类型强制转换异常ClassCastException、负数组长度异常NegativeArraySizeException、数组下标越界异常ArrayIndexOutOfBundsException等5-4请问运行没有main()方法的类会怎样?【答】此类错误是Error类,当运行没有main()方法的类时,则产生类定义未找到的错误(NoClassDefFoundError)。
java异常处理实验报告
java异常处理实验报告Java异常处理实验报告实验目的:通过实验,掌握Java中异常处理的基本原理和方法,能够编写能够处理各种异常情况的程序。
实验环境:使用Java编程语言,Eclipse集成开发环境。
实验内容:1. 异常的基本概念异常是指在程序执行过程中出现的错误情况,包括编译时异常和运行时异常。
编译时异常是在编译阶段就会被检测出来的异常,如IOException、SQLException等;而运行时异常是在程序运行过程中才会出现的异常,如NullPointerException、ArrayIndexOutOfBoundsException等。
在Java中,异常是以类的形式存在的,所有的异常类都是Throwable类的子类。
2. 异常处理的方法在Java中,异常处理的方法主要有try-catch语句和throws关键字。
try-catch 语句用于捕获和处理异常,可以将可能发生异常的代码放在try块中,然后在catch块中处理异常;throws关键字用于声明方法可能抛出的异常,让调用该方法的代码处理异常。
3. 编写能够处理异常的程序通过实验,我们编写了一段能够处理异常的程序。
在程序中,我们使用了try-catch语句来捕获可能发生的异常,并且在catch块中输出异常信息,以便程序的调用者能够得到相应的反馈。
实验结果:经过实验,我们成功掌握了Java中异常处理的基本原理和方法,能够编写能够处理各种异常情况的程序。
实验总结:异常处理是Java编程中非常重要的一部分,能够有效地提高程序的健壮性和可靠性。
通过本次实验,我们深入理解了异常处理的原理和方法,为今后的Java编程打下了坚实的基础。
希望通过不断的实践和学习,能够更加熟练地运用异常处理的技巧,编写出高质量的Java程序。
基于java异常处理机制的探索
6科技资讯科技资讯S I N &T NOLOGY I NFO RM TI ON2008N O .28SCI ENC E &TECH NOLOG Y I N FOR M A TI ON信息技术1j ava 异常处理异常机制是指当程序出现错误后,程序如何处理。
具体来说,异常机制提供了程序退出的安全通道。
当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
J a v a 异常处理是程序开发的一个重要内容,正确、合理地处理异常对系统的健壮性和稳定性提供了强有力的支持。
异常(E xc ept i on)也称为例外,是特殊的运行错误对象,对应着J a va 语言特定的运行错误处理机制。
J a va 异常是一个对象,在J a va 程序运行时,常常会出现一些非正常(即错误)的情况,这种情况根据其性质可以分为两类:错误和异常。
一类是异常在程序执行过程中发生的错误,是非致命的,而不是编译时语法错误,它破坏了程序的正常指令流程,如打开一个不存在的文件、网络连接中断、数组下标越界、算法溢出(超出数值表达范围),除数为零,无效参数、正在加载的类文件丢失等都会引发异常,通过某种修改后程序还可以继续运行;另一类是致命的,即遇到了非常严重的不正常状态,不能简单地恢复执行,这就是错误。
如类文件格式错误等。
这一类错误由J a v a 运行系统处理,不需要我们去处理。
J a va 中定义了很多异常类,每个异常类都定义了程序中遇到的轻微的错误条件,代表了一种运行错误,类中包含了该运行错误的信息和处理的方法内容。
每当J a va 程序运行过程中发生一个可识别的运行错误时,即产生一个异常,J a va 采取一个异常现象产生后,Runt i me 和应用程序抛出各种标准类型的异常,系统就可以捕获这些异常,并有相应的机制来处理它,确保不会死机、死循环或其它对操作系统的损害,从而保证了整个程序运行的安全性。
2j ava 异常的分类及体系异常的继承结构:基类为Th r owa bl e ,Er r o r 和Exc e pt i o n 继承T hr owa bl e ,R unt i m e E xce pt i on 和I OE xc ept i on 等继承E xce pt i on,具体的R unt i m e E xce pt i on 继承R x 。
第05章 异常处理
3.
类型强制转换异常ClassCastException Object obj = new Object();
String str = (String) obj;
《Java2程序设计实用教程(第2版)》
RuntimeException类(P131)
4.
负数组长度异常NegativeArraySizeException
int a[] = new int [-1]; //产生负数组长度异常 数组下标越界异常ArrayIndexOutOfBoundsException
5.
int a[] = new int[1];
a[1] = 1;
6.
//产生数组下标越界异常
数值格式异常NumberFormatException int j = Integer.parseInt("abc"); //产生数值格式异常
《Java2程序设计实用教程(第2版)》
5.1 Java异常处理基础
2.
Exception类分为:运行时异常和非运行时异常
运行时异常:是指由程序本身错误引起的异常,这类 异常程序设计时大多可以避免;如,除数为0,数组 下标越界。 (RuntimeException)
非运行时异常:是指由程序运行环境错误引起的异常,
能力。
《Java2程序设计实用教程(第2版)》
5.3 抛出异常
生成抛出异常:产生一个异常事件,生成一个异常对象。
Java虚拟机或Java应用程序 throw new Exception();
捕获处理异常:找到可处理此异常对象的方法所在的位 置,执行处理方法对异常对象进行处理。 Java虚拟机或 Java应用程序 try-catch-finally 只能是 Exception类及 其子类的对象
Java异常处理机制及其在项目中的应用
在一个完美的世界中 ,用户输入数据 的格式永 远都
是正确的 ,选择打开的文件也一定是存在 的,并且代码 永远是 不会 出现b g 。然而 ,在现实世界 中却充 满了 u的 各种不 良的数据和有问题 的代码 ,Jv 程序设计语 言使 aa
就用非运行时异 常吧。
二 、异 常 的捕获 和处 理
E c pin x e t 的层 次结构 。E c pin L 为运行 时异 常 o x et 3分 o
( u t E cpin和非运行时异常 。由程序错误 导致 R ni x et ) me o
的异 常属 于R ni E cpin ut me x e t ;曾经能够正确运行 ,而 o 由于某 些情况 ( 例如 ,I 错 误 )导致 的异常属 于非运 / O
行时异常 。请切 记 “ 如果出现R ni E cpin ut me xe t 异常 , o
就一定是你的问题 ” ,马上修改你 的程序 。如果客户端
费的时 间很 大 。因此 ,请 只在异常情 况下使 用异常机
制。
可以根据异常采取一些替代行为来恢复系统运行 ,那 么
9 8
信 息 系统工程 l2 1.1 0 0 11. 2
T o wa l类有 两个 子 类E r r x e t n h r be ro 和E c p i ,分 o
对一个空栈进行退栈操 作 。代码A 使用i 句查看栈 是 鼯
否为空;代码B 使用异常捕获方式 。 代码A:i !e t() . p ) f s mp )s o (; (. y p
别 表 示 错 误 和 异 常 。 进 行 程 序 设 计 时 ,需 要 关 注
j ac t c Ex e i ne { c pt o
java异常处理
catch语句的顺序
捕获异常的顺序和不同catch语句的顺序有 关,当捕获到一个异常时,剩下的catch语句 就不再进行匹配。 “匹配”是指catch语句的参数类型和异常 对象的类型完全相同或者为异常对象的父类 型。 在安排catch语句的顺序时,首先应该捕获 最特殊的异常,然后再逐渐一般化。也就是 一般先安排子类,再安排父类。
异常处理
什么是异常(Exception)
异常就是在程序的运行过程中所发生的非正 常事件,它中断指令的正常执行。 Java用异常对象来表示程序执行过程中发生 的异常事件.
异常示例
编译和运行下面的程序: 编译和运行下面的程序: class ExceptionDemo2{ public static void main( String args[ ] ){ int a = 0; System.out.println( 5/a ); } }
import java.io.*; class ExceptionDemo1{ public static void main( String args[ ] ){ FileInputStream fis = new FileInputStream( "text" ); int b; while( (b=fis.read())!=-1 ){ System.out.print( b ); } fis.close( ); } }
异常示例
ng.ArithmeticException: / by zero
at
ExceptionDemo2.main(ExceptionDemo 2.java:4) 有些异常(异常)在编译的时候能够发现, 有些异常(异常)在编译的时候能够发现 ,有些是在 运行的时候发现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 3.源代码 略.
h
7
4.测试与运行
• 测试程序如下: • public class HumanTest { • public static void main(String
args[]) {
•
try {
•
Human p = new
Human(args[0],args[1],args[2]);
•
– super();
–}
– public GenderCharacterException(String msg){
– super(msg);
–}
• 分析:所有自定义的异常类都是Exception的子类, 这里不论无参数的构造方法还是带参数的构造方 法都通过覆盖Exception的构造方法来实现。
– 2) 声明异常
h
9
6. 问题与思考
• 在java.util.Vector基础上封装一 个类VectorStack实现堆栈, VectorStack有压入方法push()和 弹出方法pop(),见下面程序:
– import java.util.Vector; – class VectorStack{ – static final int CAPACITY=5; – Vector v; – VectorStack(){ – v = new Vector(); –}
– if 接收的性别字符是m或f
பைடு நூலகம்
–
给this.gender赋值;
– else 抛出GenderCharacterException异常;
– 给等赋值;
–}
– void introduce(){
– 输出该对象的name;
–}
–}
• 2.编码实现
– 1) 异常类的构造方法
• 语句:
– public GenderCharacterException(){
• 语句:
– ExceptionProcess(){
–
初始化a数组;
–}
– countDown(int i){
–
try{
–
求a[i]的倒数;
–
}
– catch(ArithmeticException e){
– a[0] = 0; a[1] = 1; a[2] = 2; a[3] = 3;
• 分析:数组长度为4,最后一 个分量是a[3],a[0]初值为0。
第5章 Java异常处理
5.1 捕获异常
知识要点
异常的概念和Java异常体系结构 异常的捕获和处理 常见异常类
[实例] 编写一个求某数倒数的程序,一 旦用0做除数,捕获系统产生的异常。
h
1
• 1.详细设计
• 2.编码实现
– class ExceptionProcess{
– 1) 初始化a数组
– 定义整数型数组a;
h
5
5.2 自定义异常
• 知识要点
– 异常的抛出和声明
• [实例] 通过用户输入数据实例化Human对 象时,如果用户输入错误,抛出一个异常 并处理。
h
6
• 1.详细设计
– class GenderCharacterException extends Exception{ – 定义无参数的构造方法;
– 定义带参数的构造方法;
–}
– public class Human{
– 定义属性变量;
– Human(String name){
– 给赋值;
–}
– Human(String name, String gender,String birth)
– throws GenderCharacterException{
是:"+1/a[i]); –} – catch(ArithmeticException e){ – System.out.println("算术运算异常:
"+e.getMessage()); –}
– catch(ArrayIndexOutOfBoundsExceptio n e){
– System.out.println("数组下标超界 异常: "+e.getMessage());
– 2) 求a[i]的倒数
• 语句:
– System.out.println("a["+i+"] 的倒数是:"+1/a[i]);
• 分析:用System.out.println直 接输出1/a[i]的值。
– 3) 输出算术运算异常信息
–
输出算术运算异常信息;
–
}
–
finally{
–
调用countDown()结束;
– void push(Object obj){ – v.addElement(obj); – System.out.print(" PUSH: "+obj); –} – Object pop(){ – Object obj = stElement(); – v.removeElementAt(v.size()-1); – System.out.println(" Pop: "+obj); – return obj; –} –}
• 改进该pop()方法,使得在弹出 数据时,如果栈为空,抛出一 个异常。并编写测试程序进行 验证。
h
10
• 语句:
– Human(String name, String gender,String birth)
– throws GenderCharacterException{
–:
–}
• 分析:如果某方法体内有可能抛出异常,在编写 该方法时,第一行方法名后须用throws声明发生 的异常,这里声明GenderCharacterException。
p.introduce();
•
if (p.gender.equals("m"))
•
System.out.print("性别:" + "
男");
•
else
•
System.out.print("性别:" + "
女");
•
System.out.println(" 出生日期:
" + p.birth);
•
}
•
–
}
–} –}
•
• 语句:
– System.out.println("算术运 算异常: "+e.getMessage());
• 分析:算术异常 ArithmeticException 的 getMessage()方法可以获得异 常的信息。
3.源代码 略.
h
2
4.测试与运行
• 测试程序如下:
– class ExceptionProcessTest {
– 3) 抛出异常
• 语句:
– if (gender.equals("m")||gender.equals("f"))
–
this.gender=gender;
– else throw (new GenderCharacterException("性别字符不正确! "));
• 分析:"m"表示男,"f"表示女,如果接收到其它 字符时,用throw抛出GenderCharacterException 异常。
– public static void main(String args[]) {
–
ExceptionProcess
ep = new
ExceptionProcess();
– System.out.println(" ----------第一次调用 -----------");
–
ep.countDown(0);
–
}
– finally{
– System.out.println("调用 countDown()结束");
–}
–}
–}
• 编写测试程序 ExceptionProcessTest,设置适当 的参数i,使得调用方法 countDown()时产生一个 ArrayIndexOutOfBoundsExceptio n异常,并被程序捕获。
–}
–}
h
3
5.技术分析
• 1) 异常的概念和Java异常体系结构
– 异常是程序运行过程中未按程序的正常流程而 出现的错误。Java把异常当作对象来处理,并 定义一个基类ng.Throwable作为所有异 常的超类。
• 2) 异常的捕获和处理
– 凡是有可能发生异常的语句或方法,Java提供 了try-catch(){…}语句来运行、捕获并处理异
catch(GenderCharacterException
e){
• System.out.println(e.getMessage());
•
}
•} •}
h
8
5.技术分析
• throw关键字是用于方法体内部,用来抛出 一个Throwable类型的异常。
• throws关键字用于方法体外部的方法声明 部分,用来声明方法可能会抛出某些异常。
常。
• 3) 常见异常类
h
4
6. 问题与思考
• 将本节实例程序修改成可以捕获 ArrayIndexOutOfBoundsException异 常,见下面程序: