Java 程 序 设 计 实 验 指 导 书 商 丘 学 院 计 算 机 科 学 与 技 术 学 院 张 艳 晓
目 录 实 验 一 : 熟 悉 Java 开 发 环 境... 1 实 验 二 : 类 与 面 向 对 象... 7 实 验 三 : 继 承 和 多 态... 13 实 验 四 : 异 常 处 理... 18 实 验 五 : 流 文 件 及 基 于 文 本 的 应 用... 23
实 验 一 : 熟 悉 Java 开 发 环 境 实 验 学 时 :4 实 验 类 型 : 验 证 型 一. 实 验 目 的 1 掌 握 安 装 和 配 置 Java 运 行 开 发 环 境 的 方 法, 并 熟 悉 Java 程 序 的 集 成 开 发 工 具 Eclipse 2 掌 握 编 写 编 译 运 行 简 单 的 Java Application 和 Java Applet 程 序 的 方 法 步 骤, 初 步 了 解 java 程 序 的 特 点 和 基 本 结 构 3 掌 握 Java 基 本 数 据 类 型 运 算 符 与 表 达 式 4 理 解 Java 程 序 语 法 结 构, 掌 握 顺 序 结 构 选 择 结 构 和 循 环 结 构 语 法 的 程 序 设 计 方 法 二. 实 验 内 容 1 安 装 和 配 置 JDK 软 件 开 发 包 2 编 写 一 个 Java Application, 利 用 JDK 软 件 包 中 的 工 具 编 译 并 运 行 这 个 程 序, 使 之 能 够 输 出 字 符 串 信 息 Hello World! 3 编 写 一 个 Java Applet, 使 之 能 够 在 浏 览 器 中 显 示 welcome to Java Applet World 的 字 符 串 信 息 三. 实 验 原 理 1 Java application 和 Java applet 程 序 Java 程 序 可 以 分 为 两 类 :Java application 和 Java applet 前 者 是 完 整 的 应 用 程 序, 需 要 独 立 的 解 释 器 来 解 释 运 行 ; 后 者 则 是 嵌 在 网 页 中 的 非 独 立 程 序, 由 浏 览 器 所 自 带 的 java 解 释 器 来 解 释 运 行 - 1
2 Java 程 序 开 发 调 试 过 程 程 序 名.java 与 平 台 无 关.class Java Applet 由 Web 浏 览 器 自 带 的 Java 解 释 器 执 行 Java 编 译 器 字 节 码 文 件 Java Application 由 独 立 的 java 解 释 器 执 行 图 1.1 Java 程 序 开 发 流 程 3 Java Application 程 序 的 编 辑 编 译 和 运 行 步 骤 (1) 编 辑 源 程 序 在 编 辑 器 中 输 入 源 程 序, 文 件 名 与 公 共 类 相 同, 文 件 后 缀 为.java( 如 HelloWorldApp.java), 并 将 其 保 存 到 工 作 目 录 ( 如 e:\java 目 录 ) (2) 编 译 源 程 序 输 入 命 令 e:\java> javac HelloWorldApp.java 若 编 译 通 过, 在 e:\java 目 录 下 会 生 成 一 个 HelloWorldApp.class 文 件 (3) 程 序 的 运 行 运 行 包 含 main 方 法 的 主 类 所 编 译 生 成 的 字 节 码 文 件, 不 用 加.class 后 缀 e:\java> C:\Program Files\Java\jdk1.6.0_01\bin\java classpath. - 2
HelloWorldApp 4 Java Applet 程 序 的 编 辑 编 译 和 运 行 步 骤 (1) 在 编 辑 器 中 输 入 源 程 序, 将 其 保 存 为 与 公 共 类 同 名 的 java 文 件 (2) 编 译 源 程 序 并 生 成 一 个 和 源 文 件 同 名 且 后 缀 为 class 的 字 节 码 文 件 (3) 生 成 一 个 Html 文 件, 并 在 其 中 的 <Applet></Applet> 标 记 中 嵌 入 Applet 字 节 码 文 件 <APPLET> 标 记 中 必 须 包 含 三 个 参 数 : CODE: 指 明 嵌 入 Html 文 件 中 的 Java Applet 字 节 码 文 件 的 文 件 名 HEIGHT: 指 明 Java Applet 程 序 在 Html 文 件 所 对 应 的 Web 页 面 中 占 用 区 域 的 高 度 WIDTH: 指 明 Java Applet 程 序 在 Html 文 件 所 对 应 的 Web 页 面 中 占 用 区 域 的 宽 度 (4) 用 支 持 Java 的 浏 览 器 打 开 Html 文 件, 就 能 看 到 Applet 程 序 的 运 行 效 果 另 外 JDK 中 还 提 供 了 一 个 Applet Viewer 工 具, 也 可 用 来 浏 览 Html 中 的 Applet 四. 实 验 步 骤 1 编 写 一 个 Java Application, 利 用 JDK 软 件 包 中 的 工 具 编 译 并 运 行 这 个 程 序 步 骤 (1): 编 写 编 译 Java 源 程 序 打 开 记 事 本 编 辑 器, 新 建 一 个 java 文 件, 键 入 如 下 程 序 代 码 : - 3
public class Hello { public static void main(string args[]) {System.out.println("Hello,World!");} } 将 文 件 命 名 为 Hello.java 并 保 存 步 骤 (2): 编 译 Java 源 程 序 Java 源 程 序 编 写 后, 要 使 用 Java 编 译 器 (javac.exe) 将 Java 源 程 序 编 译 成 字 节 码 文 件 Java 源 程 序 都 是 扩 展 名 为.java 的 文 本 文 件 编 译 时 首 先 读 入 Java 源 程 序, 然 后 进 行 语 法 检 查, 如 果 出 现 问 题 就 终 止 编 译 语 法 检 查 通 过 后, 生 成 可 执 行 程 序 代 码 即 字 节 码, 字 节 码 文 件 名 和 源 文 件 名 相 同, 扩 展 名 为.class 打 开 命 令 提 示 符 窗 口 (MS-DOS 窗 口 ) 进 入 Java 源 程 序 所 在 路 径 e:\java\program 键 入 编 译 器 文 件 名 和 要 编 译 的 源 程 序 文 件 名, 具 体 如 下 : javac -d class Hello.java 按 回 车 键 开 始 编 译 ( 注 意 : 文 件 名 H 要 大 写, 否 则 运 行 会 出 问 题 ) 如 果 源 程 序 没 有 错 误, 则 屏 幕 上 没 有 输 出, 键 入 dir 按 回 车 键 后 可 在 当 前 目 录 中 看 到 生 成 了 class 子 目 录, 在 class 子 目 录 下 有 一 个 同 名 字 的.class 文 件 即 Hello. class 否 则, 将 显 示 出 错 信 息 步 骤 (3): 运 行 Java 程 序 使 用 Java 解 释 器 (java.exe ) 可 将 编 译 后 的 字 节 码 文 件 - 4
Hello.class 解 释 为 本 地 计 算 机 代 码 在 命 令 提 示 符 窗 口 或 MS-DOS 窗 口 键 入 解 释 器 文 件 名 和 要 解 释 的 字 节 码 文 件 名 :java classpath e:\java\program\class Hello 或 者 java Hello, 按 回 车 键 即 开 始 解 释 并 可 看 到 运 行 结 果 2 编 写 一 个 Java Applet, 使 之 能 够 在 浏 览 器 中 显 示 welcome to Java Applet World 的 字 符 串 信 息 步 骤 (1): 编 写 HelloWorldApplet.java 程 序 文 件, 源 代 码 如 下 import java.applet.* import java.awt.* public class HelloWorldApplet extends Applet { public void paint(graphics g) { g.drawstring( welcome to Java Applet World,40,20); } } 步 骤 (2): 保 存 文 件 为 e:\java\program\helloworldapplet.java 编 译 该 文 件, 生 成 HelloWorldApplet.class 字 节 码 文 件 步 骤 (3): 编 写 显 示 HelloWorldApplet.calss 的 页 面 文 件 HelloWorld.html, 代 码 如 下 <html> <applet codebase=e:/java/program/class - 5
code=helloworldapplet.class width=300 height=120> </applet > </html> 步 骤 (4): 在 提 示 符 窗 口 调 用 小 程 序 查 看 器 浏 览 HelloWorld.html 页 面, 观 察 Applet 应 用 程 序 五. 作 业 按 照 实 验 内 容 和 实 验 步 骤 要 求 完 成 实 验 任 务 后, 独 立 书 写 实 验 报 告 - 6
实 验 二 : 类 与 面 向 对 象 实 验 学 时 :6 实 验 类 型 : 验 证 型 一. 实 验 目 的 1 掌 握 类 和 构 造 方 法 的 定 义 2 掌 握 创 建 类 实 例 的 方 法 3 初 步 掌 握 面 向 对 象 的 编 程 思 想 二. 实 验 内 容 1 编 写 程 序 实 现 如 下 功 能 : 已 知 学 生 类 有 域 变 量 ( 学 号 班 号 姓 名 性 别 年 龄 ) 和 方 法 ( 获 得 学 号 获 得 班 号 获 得 性 别 获 得 年 龄 修 改 年 龄, 显 示 基 本 信 息 ), 定 义 一 组 学 生 对 象, 并 初 始 化 他 们 的 基 本 信 息, 然 后 依 次 输 出 2 编 写 程 序 实 现 如 下 功 能 : 已 知 学 生 类 有 域 变 量 ( 姓 名 考 号 综 合 成 绩 体 育 成 绩 ) 和 方 法 ( 获 取 综 合 成 绩 获 取 体 育 成 绩 显 示 基 本 信 息 ), 学 校 类 有 静 态 变 量 ( 录 取 分 数 线 ) 和 方 法 ( 设 置 录 取 分 数 获 取 录 取 分 数 线 ), 录 取 类 有 方 法 ( 获 取 学 生 是 否 符 合 录 取 条 件, 其 中 录 取 条 件 为 综 合 成 绩 在 录 取 分 数 线 之 上, 或 体 育 成 绩 在 96 分 以 上 并 且 综 合 成 绩 大 于 300 分 ) 现 要 求 编 写 程 序 输 出 一 组 学 生 对 象 中 被 某 学 校 录 取 的 学 生 基 本 信 息 三. 实 验 原 理 1 类 域 方 法 类 体 中 包 括 域 和 方 法, 都 是 类 的 成 员 一 个 类 可 以 定 义 多 个 域 和 方 法 (1) 域 也 就 是 类 的 静 态 属 性, 也 称 为 变 量 成 员 变 量 等, 格 式 为 : - 7
类 型 名 域 名 ; 在 定 义 域 变 量 前, 还 可 以 加 修 饰 符 (2) 方 法 是 类 的 动 态 属 性 Java 的 方 法 与 其 它 语 言 中 的 函 数 类 似 由 方 法 头 和 方 法 体 组 成 : 修 饰 符 1 返 回 类 型 方 法 名 ( 形 参 列 表 )throws 异 常 列 表 { 方 法 体 语 句 ; } 其 中, 形 参 列 表 格 式 为 : 形 参 类 型 形 参 名 1, 形 参 类 型 形 参 名 2 2 类 和 对 象 (1) 类 (class): 抽 象 的 集 合 概 念 类 包 括 系 统 类 库 中 已 定 义 好 的 类 和 用 户 自 定 义 的 类 (2) 对 象 ( 实 例 instance): 实 际 个 体 创 建 某 个 类 的 具 体 对 象 ( 类 似 变 量 声 明 ), 具 体 定 义 格 式 为 : 类 名 对 象 变 量 =new 类 名 ([ 参 数 ]); (3) 构 造 方 法 : 构 造 方 法 的 名 字 与 类 名 相 同 创 建 对 象 时 自 动 调 用, 并 对 对 象 进 行 初 始 化 操 作 注 意 : 构 造 方 法 前 面 没 有 返 回 类 型 定 义, 它 没 有 返 回 值, 也 不 是 void [ 不 能 return];java 每 个 类 都 至 少 有 一 个 构 造 方 法 [ 系 统 默 认 无 参 数 构 造 方 法 ]; 一 旦 定 义 了 构 造 方 法, 系 统 不 再 提 供 默 认 构 造 方 法 (4) 对 象 的 使 用 : 要 访 问 或 调 用 一 个 对 象 的 域 或 者 方 法, 使 用. 操 作 符 一 般 形 式 : 引 用 对 象 变 量 名. 域 / 方 法 名 ; 如 p.sayhello(); 由 于 只 能 用 对 象 变 量 来 访 问 这 个 对 象 的 域 或 方 法, 不 通 过 引 用 - 8
变 量 就 没 有 办 法 访 问, 体 现 了 面 向 对 象 的 封 装 性 3 静 态 域 和 静 态 方 法 (1) 静 态 域 用 static 修 饰 的 域 属 于 类 的 静 态 域 ( 静 态 量, 类 变 量 ), 不 用 static 修 饰 的 为 实 例 变 量 ( 实 例 域 ) 静 态 域 的 特 点 如 下 : 它 们 是 类 的 域, 不 属 于 任 何 一 个 类 的 具 体 对 象 实 例 它 保 存 在 类 的 内 存 区 域 的 公 共 存 储 单 元 对 于 该 类 的 任 何 一 个 实 例 对 象, 静 态 域 是 一 个 公 共 的 存 储 单 元 任 何 一 个 类 的 对 象 访 问 它, 取 到 的 都 是 相 同 的 值 ; 任 何 一 个 类 的 对 象 修 改 它, 那 么 也 是 在 对 同 一 个 内 存 单 元 进 行 操 作 (2) 静 态 方 法 用 static 修 饰 的 方 法 属 于 类 的 静 态 方 法, 又 称 为 类 方 法 不 用 static 修 饰 的 方 法 为 实 例 方 法 类 方 法 的 本 质 是 该 方 法 属 于 整 个 类, 而 不 是 属 于 某 个 实 例 静 态 方 法 具 有 如 下 特 点 : static 方 法 是 属 于 整 个 类 的, 它 在 内 存 中 的 代 码 段 将 随 着 类 的 定 义 而 进 行 分 配 和 装 载 而 非 static 的 方 法 是 属 于 某 个 对 象 的, 在 这 个 对 象 创 建 时, 对 象 的 方 法 在 内 存 中 有 自 己 的 代 码 段 static 方 法 不 能 操 纵 属 于 某 个 对 象 的 成 员 变 量, 只 能 处 理 属 于 类 的 成 员 变 量, 即 只 能 处 理 static 域 和 方 法 类 方 法 中 不 能 访 问 实 例 变 量, 也 不 能 使 用 this 或 super 调 用 类 方 法 可 以 使 用 类 名, 也 可 以 用 具 体 对 象 名 - 9
四. 实 验 步 骤 1 编 写 程 序 实 现 如 下 功 能 : 已 知 学 生 类 有 域 变 量 ( 学 号 班 号 姓 名 性 别 年 龄 ) 和 方 法 ( 构 造 方 法 获 得 学 号 获 得 班 号 获 得 性 别 获 得 年 龄 修 改 年 龄, 显 示 基 本 信 息 ), 定 义 一 组 学 生 对 象, 并 初 始 化 他 们 的 基 本 信 息, 然 后 依 次 输 出 步 骤 (1): 定 义 类 Stduent, 并 添 加 如 下 域 变 量 : String sno; String classno; String name; char sex; int age; 步 骤 (2): 在 类 Student 中 添 加 如 下 方 法, 并 编 写 代 码 实 现 具 体 方 法 的 功 能 : Student(String sno,string classno,string name,char sex,int age){ } String getsno(){ } String getclassno(){ } String getsex(){ } int getage(){ } void updateage(int age){ } void print(){ } 步 骤 (3): 定 义 一 个 包 含 main 方 法 的 Application 程 序 类 TestStudent, 初 始 化 一 个 学 生 类 对 象 数 组, 并 利 用 循 环 语 句 显 示 所 有 学 生 的 基 本 信 息 步 骤 (4): 保 存 文 件 名 为 TestStudent.java, 然 后 编 译 调 试 和 运 行 程 序 - 10
2 编 写 程 序 实 现 如 下 功 能 : 已 知 学 生 类 有 域 变 量 ( 姓 名 考 号 综 合 成 绩 体 育 成 绩 ) 和 方 法 ( 获 取 综 合 成 绩 获 取 体 育 成 绩 显 示 基 本 信 息 ), 学 校 类 有 静 态 变 量 ( 录 取 分 数 线 ) 和 方 法 ( 设 置 录 取 分 数 获 取 录 取 分 数 线 ), 录 取 类 有 方 法 ( 获 取 学 生 是 否 符 合 录 取 条 件, 其 中 录 取 条 件 为 综 合 成 绩 在 录 取 分 数 线 之 上, 或 体 育 成 绩 在 96 分 以 上 并 且 综 合 成 绩 大 于 300 分 ) 现 要 求 编 写 程 序 输 出 一 组 学 生 对 象 中 被 某 学 校 录 取 的 学 生 基 本 信 息 步 骤 (1): 定 义 类 Stduent, 并 添 加 如 下 域 变 量 : String name; String id; float comscore; float score ; 步 骤 (2): 在 类 Student 中 添 加 如 下 方 法, 并 编 写 代 码 实 现 具 体 方 法 的 功 能 : Student(String name,string id, float comscore, float score){ } float getcomscore(){ } float getscore(){ } void print(){ } 步 骤 (3) 定 义 类 School, 并 添 加 静 态 变 量 static float scoreline; 添 加 静 态 方 法 static float getscoreline(){ } static void setscoreline(float score){ } 步 骤 (4) 定 义 一 个 Application 程 序 类 Enroll 并 添 加 方 法 : public static void main(string args[]){ } static boolean isenroll(student s){ } - 11
步 骤 (5) 保 存 文 件 名 为 Enroll.java, 然 后 编 译 调 试 和 运 行 程 序 五. 作 业 按 照 实 验 内 容 和 实 验 步 骤 要 求 完 成 实 验 任 务 后, 独 立 书 写 实 验 报 告 - 12
实 验 三 : 继 承 和 多 态 实 验 学 时 :8 实 验 类 型 : 设 计 型 一. 实 验 目 的 1 掌 握 类 的 继 承 机 制 2 熟 悉 类 中 成 员 变 量 和 方 法 的 访 问 控 制 3 熟 悉 方 法 或 构 造 方 法 多 态 性 4 熟 悉 接 口 的 定 义 方 法 二. 实 验 内 容 1 编 写 程 序 实 现 如 下 功 能 : 已 知 Person 类 包 含 三 个 公 共 域 变 量 ( 姓 名 性 别 年 龄 ) 和 一 个 构 造 方 法,Student 类 是 Person 类 的 派 生 类, 包 含 两 个 新 的 公 共 域 变 量 ( 学 号 班 号 ) 两 个 公 共 方 法 ( 修 改 年 龄 显 示 基 本 信 息 ) 及 一 个 构 造 方 法 定 义 一 组 学 生 对 象, 并 初 始 化 他 们 的 基 本 信 息, 然 后 依 次 输 出 2 输 入 课 本 例 5-4 的 源 程 序, 观 察 其 运 行 结 果, 然 后 将 Shape 类 分 别 定 义 为 一 个 抽 象 类 和 接 口, 然 后 将 源 程 序 进 行 修 改, 让 其 实 现 相 同 功 能 三. 实 验 原 理 1 类 的 继 承 面 向 对 象 语 言 允 许 从 一 个 已 有 的 类 [ 父 类 ] 定 义 新 的 类 [ 子 类 ], 从 而 形 成 继 承 关 系 父 类 是 所 有 子 类 的 公 共 域 和 公 共 方 法 的 集 合, 每 个 子 类 是 父 类 的 特 殊 化 子 类 继 承 父 类 的 状 态 和 行 为, 同 时 也 可 以 修 改 父 - 13
类, 并 可 以 添 加 新 的 状 态 和 行 为 (1) 域 的 继 承 和 添 加 子 类 可 以 从 父 类 那 里 继 承 所 有 的 没 有 被 private 和 static 修 饰 的 域 那 么 子 类 就 无 需 再 重 复 定 义 还 可 以 在 子 类 中 定 义 其 独 特 的 域 变 量 : (2) 方 法 的 继 承 覆 盖 和 添 加 父 类 的 非 private 方 法 也 可 以 被 子 类 自 动 继 承 同 时 子 类 也 可 以 重 新 定 义 与 父 类 同 名 的 方 法, 实 现 对 其 的 覆 盖 / 重 置 (override/overlay) 在 覆 盖 父 类 方 法 时 注 意 应 保 持 完 全 相 同 的 方 法 名 返 回 值 和 参 数 类 型 列 表, 即 重 写 父 类 中 的 方 法 另 外 子 类 还 可 以 重 载 父 类 的 方 法 或 添 加 新 的 方 法 2 访 问 修 饰 符 Java 提 供 4 种 访 问 权 限 : public protected private 和 默 认 描 述 private 默 认 protected public 同 一 类 中 同 一 包 中 对 子 类 同 一 包 中 对 非 子 类 不 同 包 中 对 子 类 不 同 包 中 对 非 子 类 3 抽 象 类 和 接 口 (1) 抽 象 类 和 抽 象 方 法 一 个 方 法 如 果 没 有 定 义 方 法 体, 则 称 该 方 法 为 抽 象 方 法 包 含 一 个 或 多 个 抽 象 方 法 的 类, 称 为 抽 象 类 定 义 抽 象 类 后, 其 它 类 可 以 对 它 进 行 扩 充 并 且 通 过 实 现 其 中 的 抽 象 方 法, 使 抽 象 类 具 体 - 14
化 Java 语 言 中, 用 abstract 关 键 字 来 修 饰 一 个 类 时, 这 个 类 叫 做 抽 象 类, 用 abstract 关 键 字 来 修 饰 一 个 方 法 时, 这 个 方 法 叫 做 抽 象 方 法 抽 象 类 的 语 法 格 式 如 下 abstract Class{ } // 抽 象 类 抽 象 方 法 的 语 法 格 式 如 下 abstract returntype abstractmethod([paramlist]) // 抽 象 方 法 抽 象 类 必 须 被 继 承, 抽 象 方 法 必 须 被 重 写 抽 象 方 法 只 需 声 明, 无 需 实 现, 抽 象 类 不 能 被 实 例 化 若 类 中 包 含 了 抽 象 方 法, 则 该 类 必 须 被 定 义 为 抽 象 类 (2) 接 口 接 口 是 抽 象 类 的 一 种, 只 包 含 常 量 和 方 法 的 定 义, 而 没 有 方 法 的 实 现, 且 其 方 法 都 是 抽 象 方 法 它 的 用 处 体 现 在 下 面 几 个 方 面 : 通 过 接 口 指 明 多 个 类 需 要 实 现 的 方 法 通 过 接 口 实 现 不 相 关 类 的 相 同 行 为, 而 无 需 考 虑 这 些 类 之 间 的 关 系 通 过 接 口 了 解 对 象 的 交 互 界 面, 而 无 需 了 解 对 象 所 对 应 的 类 接 口 的 定 义 包 括 接 口 声 明 和 接 口 体, 接 口 声 明 的 格 式 如 下 : [public] interface interfacename[extends listofsuperinterface] { } 其 中,extends 子 句 与 类 声 明 的 extends 子 句 基 本 相 同, 不 同 的 是 一 个 接 口 可 有 多 个 父 接 口, 用 逗 号 隔 开, 而 一 个 类 只 能 有 一 个 基 类 4 多 态 的 两 种 表 现 形 式 - 15
(1) 同 一 类 中 的 方 法 多 态 ( 方 法 重 载 ): 同 一 类 中 允 许 多 个 同 名 方 法, 通 过 参 数 的 数 量 类 型 的 差 异 进 行 区 分 (2) 子 类 对 父 类 方 法 的 重 新 定 义 ( 方 法 覆 盖 ): 方 法 名 返 回 值 和 参 数 形 态 完 全 一 样 四 实 验 步 骤 1 编 写 程 序 实 现 如 下 功 能 : 已 知 Person 类 包 含 三 个 公 共 域 变 量 ( 姓 名 性 别 年 龄 ) 和 一 个 构 造 方 法,Student 类 是 Person 类 的 派 生 类, 包 含 两 个 新 的 公 共 域 变 量 ( 学 号 班 号 ) 两 个 公 共 方 法 ( 构 造 方 法 修 改 年 龄 显 示 基 本 信 息 ) 和 一 个 构 造 方 法 定 义 一 组 学 生 对 象, 并 初 始 化 他 们 的 基 本 信 息, 然 后 依 次 输 出 步 骤 (1): 定 义 类 Person, 并 添 加 以 下 公 共 域 变 量 public String name; public char sex; public int age; 添 加 构 造 方 法 Person(String name,char sex,int age){ } 步 骤 (2): 基 于 类 Person 派 生 类 Student, 并 添 加 如 下 公 共 域 变 量 和 方 法 public String classno; public String sno; public void updateage(int age){ } void tostring(){ } Student(String name,char sex,int age,string sno,string name) { super(name,sex,age);. } 步 骤 (3): 定 义 一 个 包 含 main 方 法 的 Application 程 序 类 - 16
TestStudentPerson, 初 始 化 一 个 学 生 类 对 象 数 组, 并 利 用 循 环 语 句 显 示 所 有 学 生 基 本 信 息 2 输 入 课 本 例 5-4 的 源 程 序, 观 察 其 运 行 结 果, 然 后 将 Shape 类 分 别 定 义 为 一 个 抽 象 类 和 接 口, 然 后 将 源 程 序 进 行 修 改, 让 其 实 现 相 同 功 能 步 骤 (1): 在 编 辑 调 试 工 具 中 输 入 课 本 TestVirtualInvoke.java 程 序, 编 译 运 行, 观 察 程 序 的 运 行 结 果, 并 思 考 为 什 么 产 生 这 样 的 结 果 步 骤 (2): 将 Shape 类 定 义 为 abstact class Shape{ }, 然 后 重 新 定 义 Shape 抽 象 类 的 派 生 类 Circle Triangle Line, 最 后 编 译 运 行, 观 察 程 序 的 运 行 结 果 是 否 和 上 面 的 结 果 相 同 步 骤 (3): 将 Shape 定 义 为 interface Shape{ }, 然 后 基 于 Shape 接 口 实 现 类 Circle Triangle Line, 最 后 编 译 运 行, 观 察 程 序 的 运 行 结 果 是 否 和 上 面 的 结 果 相 同 五. 作 业 按 照 实 验 内 容 和 实 验 步 骤 要 求 完 成 实 验 任 务 后, 独 立 书 写 实 验 报 告 - 17
实 验 四 : 异 常 处 理 实 验 学 时 :4 实 验 类 型 : 验 证 型 一. 实 验 目 的 1 了 解 异 常 处 理 方 法 2 熟 悉 并 掌 握 常 见 异 常 的 捕 获 方 法 3 熟 悉 JDK 中 已 经 定 义 的 若 干 异 常 类 的 层 次 结 构 4 掌 握 自 定 义 异 常 类 的 创 建 方 法 二. 实 验 内 容 1 编 写 程 序 实 现 如 下 功 能 : 生 成 并 捕 获 到 如 下 类 型 的 异 常 : NegativeArraySizeException 和 IndexOutOfBoundsException 并 显 示 捕 获 到 的 异 常 信 息 然 后 在 此 基 础 上 生 成 并 捕 获 到 NullPointerException 类 型 的 异 常, 并 显 示 捕 获 到 的 异 常 信 息 2 编 写 程 序 实 现 如 下 功 能 : 计 算 两 个 数 之 和, 参 与 求 和 运 算 的 每 个 数 的 值 都 必 须 在 10-20 之 间, 当 任 意 一 个 数 超 出 范 围 时, 抛 出 自 己 的 异 常 三. 实 验 原 理 1 异 常 的 分 类 (1) 异 常 是 一 个 对 象, 它 继 承 自 Throwable 类 (2)Error: 由 Java 虚 拟 机 生 成 并 抛 出,Java 程 序 不 做 处 理 (3)Exception: 其 它 由 于 编 程 错 误 及 偶 然 的 外 在 因 素 导 致 的 一 般 性 问 题 一 般 我 们 所 说 的 异 常 都 是 指 Exception 及 其 子 类 - 18
2 异 常 处 理 结 构 try{ } catch( 异 常 类 名 异 常 形 参 名 ) { } catch( 异 常 类 名 异 常 形 参 名 ) { } finally { } 说 明 : (1)finally 总 是 执 行, 它 是 异 常 处 理 的 统 一 出 口, 常 用 来 实 现 资 源 释 放 文 件 关 闭 等 功 能 (2) 发 生 异 常 时,try 块 内 的 后 续 语 句 不 再 执 行 (3)catch 按 照 次 序 进 行 匹 配 检 查 处 理, 找 到 一 个 匹 配 者, 不 再 找 其 他 ;catch 的 排 列 要 按 照 先 个 别 化 再 一 般 化 的 次 序, 不 再 将 父 类 异 - 19
常 排 在 前, 子 类 异 常 排 在 后 3 常 见 的 系 统 异 常 (1) ArithmeticException (2) ArrayIndexOutOfBandsException (3) ArrayStoreException (4) IOException (5) FileNotFoundException (6) NullPointerException (7) MalformedURLException (8) NumberFormatException (9) OutOfMemoryException 4 自 定 义 异 常 的 步 骤 (1) 声 明 一 个 新 的 异 常 类, 使 之 以 Exception 类 或 其 他 某 个 已 经 存 在 的 系 统 异 常 类 或 用 户 定 义 异 常 类 为 父 类 (2) 为 新 的 异 常 类 定 义 属 性 和 方 法, 或 重 载 父 类 的 属 性 和 方 法, 使 这 些 属 性 和 方 法 能 够 体 现 该 类 对 应 的 错 误 信 息 四 实 验 步 骤 1 编 写 程 序 实 现 如 下 功 能 : 生 成 并 捕 获 到 如 下 类 型 的 异 常 : NegativeArraySizeException 和 IndexOutOfBoundsException 并 显 示 捕 获 到 的 异 常 信 息 然 后 在 此 基 础 上 生 成 并 捕 获 到 NullPointerException 类 型 的 异 常, 并 显 示 捕 获 到 的 异 常 信 息 - 20
步 骤 (1): 编 写 一 个 包 含 main 方 法 的 Application 类 TestException, 然 后 定 义 一 个 方 法 void arraysize(){ } 生 成 并 捕 获 NegativeArraySizeException 异 常 步 骤 (2): 添 加 一 个 方 法 void outofbound(){ } 生 成 并 捕 获 IndexOutOfBoundsException 异 常 步 骤 (3): 添 加 一 个 方 法 void nullpointer(){ } 生 成 并 捕 获 IndexOutOfBoundsException 异 常 步 骤 (4): 在 main 方 法 中 分 别 调 用 以 上 三 个 方 法 步 骤 (5): 将 文 件 保 存 为 TestException.java, 然 后 编 译 调 试 应 用 程 序 步 骤 (6): 将 outofbound() 方 法 中 捕 获 异 常 的 语 句 注 释 掉, 重 新 编 译 程 序, 看 看 会 不 会 有 什 么 语 法 错 误? 如 果 没 错 误, 执 行 程 序 看 结 果 有 什 么 不 同? 步 骤 (7): 将 array 方 法 重 新 定 义 为 如 下 形 式 : void arraysize() throws NegativeArraySizeException{ } 然 后 修 改 arraysize 方 法 中 捕 获 NegativeArraySizeException 异 常 的 语 句 执 行 部 分 2 编 写 程 序 实 现 如 下 功 能 : 计 算 两 个 数 之 和, 参 与 求 和 运 算 的 每 个 数 的 值 都 必 须 在 10-20 之 间, 当 任 意 一 个 数 超 出 范 围 时, 抛 出 自 己 的 异 - 21
常 步 骤 (1): 基 于 系 统 异 常 类 Exception, 定 义 自 己 的 异 常 类 NumberRangeException 步 骤 (2): 定 义 包 含 main 方 法 的 Application 类 SelfException 步 骤 (3): 在 SelfException 类 中 添 加 公 共 方 法 : Public static int selfexceptiontest(int int1,int int2) throws NumberRangeException 使 之 能 在 求 int1,int2 两 个 数 和 之 前 检 查 两 个 数 的 数 值 范 围, 若 符 合 条 件 则 求 和, 否 则 抛 出 异 常 NumberRangeException 步 骤 (4): 在 main 方 法 中 调 用 selfexceptiontest 方 法 步 骤 (5): 保 存 文 件 为 SelfException.java, 然 后 编 译 并 调 试 程 序 步 骤 (6): 修 改 main 方 法 中 调 用 selfexceptiontest 方 法 的 实 参, 看 看 程 序 的 运 行 结 果 有 什 么 不 同 五. 作 业 按 照 实 验 内 容 和 实 验 步 骤 要 求 完 成 实 验 任 务 后, 独 立 书 写 实 验 报 告 - 22
实 验 五 : 流 文 件 及 基 于 文 本 的 应 用 实 验 学 时 :6 实 验 类 型 : 验 证 型 一. 实 验 目 的 1 理 解 数 据 流 的 概 念 2 理 解 Java 流 的 层 次 结 构 3 理 解 并 掌 握 文 件 的 读 写 操 作 方 法 二. 实 验 内 容 1. 编 写 一 个 java Application 程 序, 接 受 用 户 输 入 的 10 个 整 数, 比 较 并 输 出 其 中 的 最 大 值 和 最 小 值 2 编 写 一 个 程 序, 能 将 一 个 源 程 序 中 的 空 行 及 注 释 去 掉, 并 将 处 理 后 的 内 容 写 到 目 标 文 件 中 ( 源 文 件 名 称 和 目 标 文 件 名 称 均 要 求 以 命 令 行 参 数 形 式 输 入 ) 三. 实 验 原 理 1 字 节 流 和 字 符 流 Java 的 输 入 / 输 出 流 中, 根 据 它 们 的 数 据 类 型, 主 要 可 分 为 两 类 : 字 符 流 (Character Stream) 和 字 节 流 (Btye Stream) (1) 字 符 流 字 符 流 的 输 入 / 输 出 数 据 是 字 符 码, 即 Unicode 字 符 字 符 流 有 两 个 基 本 类 :Reader 类 和 Writer 类 Reader 类 用 于 处 理 字 符 输 入 流,Writer 类 用 于 处 理 字 符 输 出 流 (2) 字 节 流 - 23
字 节 流 是 按 字 节 读 / 写 二 进 制 数 据 字 节 流 有 两 个 基 本 的 类 : InputStream 类 和 OutputStream 类 InputStream 类 用 于 处 理 字 节 输 入 流,OutputStream 类 用 于 处 理 字 节 输 出 流 2 节 点 流 和 处 理 流 按 照 流 是 否 直 接 与 特 定 的 地 方 ( 如 磁 盘 内 存 等 ) 相 连, 分 为 节 点 流 与 处 理 流 (1) 节 点 流 : 可 以 从 或 者 向 一 个 特 定 的 地 方 ( 节 点 ) 读 写 数 据 如 文 件 流 FileReader (2) 处 理 流 : 是 对 一 个 已 经 存 在 的 流 的 连 接 和 封 装, 通 过 所 封 装 的 流 的 功 能 调 用 实 现 数 据 读 写 功 能 处 理 流 也 称 过 滤 流, 如 缓 冲 处 理 流 BufferedReader 3 文 件 字 节 流 (1) 文 件 字 节 输 入 流 FileInputStream( 文 件 字 节 输 入 流 ) 主 要 用 于 文 件 的 输 入, 通 过 该 类 创 建 的 对 象 可 以 从 文 件 中 读 数 据 FileInputStream 类 提 供 的 常 用 方 法 有 : FileInputStream(String name) throws FileNotFoundException 创 建 一 个 关 联 到 实 际 文 件 的 文 件 字 节 输 入 流,name 指 定 了 要 关 联 到 的 文 件 的 路 径 名 如 果 该 文 件 不 存 在 或 是 不 能 被 打 开, 将 抛 出 一 个 FileNotFoundException 异 常 FileInputStream(File file) throws FileNotFoundException - 24
创 建 一 个 关 联 到 实 际 文 件 的 文 件 字 节 输 入 流,file 是 一 个 文 件 对 象 如 果 该 文 件 不 存 在 或 是 不 能 被 打 开, 将 抛 出 一 个 FileNotFoundException 异 常 (2) 文 件 字 节 输 出 流 FileOutputStream( 文 件 字 节 输 出 流 ) 主 要 用 于 文 件 的 输 出, 通 过 该 类 创 建 的 对 象 可 以 往 文 件 中 写 数 据 FileOutputStream 类 提 供 的 常 用 方 法 有 : FileOutputStream (String name) throws FileNotFoundException FileOutputStream (File file) throws FileNotFoundException FileOutputStream (String name, boolean append) throws FileNotFoundException FileOutputStream (File file, boolean append) throws FileNotFoundException 4 字 符 文 件 流 FileReader 用 于 文 件 的 输 入, 该 类 以 字 符 流 的 方 式 从 文 件 中 读 数 据 FileReader 类 提 供 的 常 用 方 法 有 : FileReader(String name) throws FileNotFoundException FileReader (File file) throws FileNotFoundException FileWriter 用 于 文 件 的 输 出, 该 类 以 字 符 流 的 方 式 往 文 件 中 写 数 据 FileWriter 类 提 供 的 常 用 方 法 有 : FileWriter (String name) throws FileNotFoundException - 25
FileWriter (String name, boolean append) throws FileNotFoundException FileWriter (File file, boolean append) throws FileNotFoundException 5 Java Application 命 令 行 参 数 Java Application 是 用 命 令 行 来 启 动 执 行 的, 命 令 行 参 数 就 成 为 向 java application 传 入 数 据 的 常 用 方 式 在 启 动 java 应 用 程 序 时 可 以 一 次 性 的 向 应 用 程 序 中 传 递 0 到 多 个 参 数 格 式 为 : java 类 名 参 数 1 参 数 2 参 数 间 用 空 格 隔 开, 如 果 参 数 本 身 有 空 格, 则 要 用 一 对 双 引 号 引 起 来 命 令 行 参 数 被 系 统 以 String 数 组 的 方 式 传 递 给 main 方 法, 由 参 数 args 接 收 四 实 验 步 骤 1) 编 写 一 个 java Application 程 序, 接 受 用 户 输 入 的 10 个 整 数, 比 较 并 输 出 其 中 的 最 大 值 和 最 小 值 步 骤 (1): 定 义 一 个 包 含 main 方 法 的 Application 类 MaxMinClass 步 骤 (2): 在 MaxMinClass 类 中 添 加 如 下 两 个 方 法, 分 别 求 取 10 个 整 数 的 最 大 值 和 最 小 值 : static int maxint(int data[],int n){ } static int minint(int data[],int n){ } 步 骤 (3): 在 main 方 法 中 从 键 盘 输 入 10 个 整 数 存 放 到 数 组 data 中, 然 后 调 用 maxint minint 方 法 求 取 最 大 值 和 最 小 值, 最 - 26
后 输 出 最 大 值 和 最 小 值 步 骤 (4): 保 存 文 件 MaxMinClass.java, 然 后 编 译 调 试 程 序 2) 编 写 一 个 程 序, 能 将 一 个 源 程 序 中 的 空 行 及 注 释 去 掉, 并 将 处 理 后 的 内 容 写 到 目 标 文 件 中 ( 源 文 件 名 称 和 目 标 文 件 名 称 均 要 求 以 命 令 行 参 数 形 式 输 入 ) 步 骤 (1): 定 义 一 个 包 含 main 方 法 的 Application 类 CopyFile. 步 骤 (2): 在 CopyFile 类 中 添 加 delcomm 方 法, 实 现 将 一 行 中 的 注 释 去 掉 : static String delcomm(string s){ } 步 骤 (3): 在 main 方 法 中 通 过 命 令 行 参 数 获 取 源 文 件 名 和 目 标 文 件 名 ; 然 后 读 取 源 文 件 中 的 每 一 行 信 息, 并 调 用 delcomm 取 出 行 中 的 注 释 ; 其 次 判 断 该 行 是 否 为 空 行, 若 五. 作 业 按 照 实 验 内 容 和 实 验 步 骤 要 求 完 成 实 验 任 务 后, 独 立 书 写 实 验 报 告 - 27