WEB开发网
开发学院WEB开发Jsp Java语言入门 -- 第八章 Java的“异常” 阅读

Java语言入门 -- 第八章 Java的“异常”

 2008-01-05 19:38:41 来源:WEB开发网   
核心提示:第八章java的“异常” “ 异 常” 指 的 是 程 序 运 行 时 出 现 的 非 正 常 情 况, 在 用 传统 的 语 言 编 程 时,Java语言入门 -- 第八章 Java的“异常”, 程 序 员 只 能 通 过 函 数 的 返 回 值 来 发 出错 误 信 息, 这 易 于 导 致 很 多 错 误, 如
第八章 java的“异常”

          

“ 异 常” 指 的 是 程 序 运 行 时 出 现 的 非 正 常 情 况。 在 用 传统 的 语 言 编 程 时, 程 序 员 只 能 通 过 函 数 的 返 回 值 来 发 出错 误 信 息。 这 易 于 导 致 很 多 错 误, 因 为 在 很 多 情 况 下 需 要知 道 错 误 产 生 的 内 部 细 节。 通 常, 用 全 局 变 量errno来 存 储“ 异 常” 的 类 型。 这 容 易 导 致 误 用, 因 为 一 个errno的 值 有 可 能在 被 处 理 ?reg; 前 被 另 外 的 错 误 覆 盖 掉。 即 使 最 优 美 的C语言 程 序, 为 了 处 理“ 异 常” 情 况, 也 常 求 助 于goto语 句。 Java对“ 异 常” 的 处 理 是 面 向 对 象 的。 一 个Java的Exception是 一 个 描 述“ 异 常” 情 况 的 对 象。 当 出 现“ 异 常” 情 况 时, 一 个Exception对象 就 产 生 了, 并 放 到 产 生 这 个“ 异 常” 的 成 员 函 数 里。

8.1 基础

Java的“ 异 常” 处 理 是 通 过5个 关 键 词 来 实 现 的:try, catch, throw, throws和finally。 用try 来 执 行 一 段 程 序, 如 果 出 现“ 异常”, 系 统 抛 出(throws?copy; 一 个“ 异 常”, 你 可 以 通 过 它 的类 型 来 捕 捉(catch?copy; 它, 或 最 后(finally?copy; 由 缺 省 处理 器 来 处 理。 下 面 是“ 异 常” 处 理 程 序 的 基 本 形 式:

try { //程 序 块 } catch (ExceptionType1 e) { // 对ExceptionType1的处 理 } catch (ExceptionType2 e) { // 对ExceptionType2的 处 理 throw(e); //再 抛 出 这 个“ 异 常” } finally { }

8.2 "异 常” 的 类 型

在“ 异 常” 类 层 次 的 最 上 层 有 一 个 单 独 的 类 叫 做Throwable。这 个 类 用 来 表 示 所 有 的“ 异 常” 情 况。 每 个“ 异 常” 类 型 都是Throwable的 子 类。Throwable有 两 个 直 接 的 子 类。 一 类 是Exception,是 用 户 程 序 能 够 捕 捉 到 的“ 异 常” 情 况。 我 们 将 通 过 产 生它 的 子 类 来 创 建 自 己 的“ 异 常”。 另 一 类 是Error, 它 定 义 了那 ?copy; 通 常 无 法 捕 捉 到 的“ 异 常”。 要 谨 慎 使 用Error子 类,因 为 它 们 通 常 会 导 致 灾 难 性 的 失 败。 在Exception中 有 一 个 子类RuntimeException, 它 是 程 序 运 行 时 自 动 地 对 某 ?copy; 错 误作 出 反 应 而 产 生 的。

8.3 不 捕 捉“ 异 常”

“ 异 常” 对 象 是Java在 运 行 时 对 某 ?copy;“ 异 常” 情 况 作出 反 应 而 产 生 的。 例 如, 下 面 这 个 小 程 序 包 含 一 个 整 数 被0除的“ 异 常”。

class Exc0 { public static void main(String args[]) { int d = 0; int a = 42/d; } }

当Java执 行 这 个 除 法 时, 由 于 分 母 是0, 就 会 构 造 一 个“ 异常” 对 象 来 使 程 序 停 下 来 并 处 理 这 个 错 误 情 况, 在 运 行 时“ 抛 出”(throw?copy; 这 个“ 异 常”。 说“ 抛 出” 是 因 为 它 象 一个 滚 烫 的 马 铃 薯, 你 必 须 把 它 抓 住 并 立 即 处 理。 程 序 流 将会 在 除 号 操 作 符 处 被 打 断, 然 后 检 查 当 前 的 调 用 堆 栈 来查 找“ 异 常”。 一 个“ 异 常” 处 理 器 是 用 来 立 即 处 理“ 异 常” 情 况 的。 在 这 个 例 子 里, 我 们 没 有 编 一 个“ 异 常” 处 理 器,所 以 缺 省 的 处 理 器 就 发 挥 作 用 了。 缺 省 的 处 理 器 打 印Exception的字 符 ?reg; 值 和 发 生 “ 异 常” 的 地 点。 下 面 是 我 们 的 小 例子 的 输 出。

C:>java Exc0 java.lang.arithmeticException: / by zero at Exc0.main(Exc0.java:4)

8.4 try与catch

通 常 我 们 希 望 自 己 来 处 理“ 异 常” 并 继 续 运 行。 可 以 用try来指 定 一 块 预 防 所 有“ 异 常” 的 的 程 序。 紧 跟 在try程 序 后 面,应 包 含 一 个catch子 句 来 指 定 你 想 要 捕 捉 的“ 异 常” 的 类 型。例 如, 下 面 的 例 子 是 在 前 面 的 例 子 的 基础上 构 造 的, 但 它包 含 一 个try程 序 块 和 一 个catch子 句。

class exc1 { public static void main(string args[]) { try { int d = 0; int a = 42 / d; } catch (arithmeticexception e) { system.out.PRintln("division by zero"); } } }

catch子 句 的 目 标 是 解 决“ 异 常” 情 况, 把 一 ?copy; 变 量 设到 合 理 的 状 态, 并 象 没 有 出 错 一 样 继 续 运 行。 如 果 一 个 子程 序 不 处 理 某 个“ 异 常”, 则 返 到 上 一 级 处 理, 直 到 最 外一 级。

8.5 多 个catch子 句


Tags:Java 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接