![]() ![]() |
|
第三章Java程序设计基础(4) | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:42:08 文章录入:杜斌 责任编辑:杜斌 | |
|
|
成 员 函 数 成 员 函 数 是 一 ?copy; 可 被 其 它 类 或 自 己 类 调用 的 处 理 子 程 序。 一 个 特 殊 的 成 员 函 数 叫 构 造 函 数, 这 个函 数 名 称 一 般 与 本 类 名 程 相 同。 它 没 有 返 回 值。 构 造 函 数 和 成 员 函 数 当 你 在Java里 定 义 一 个 类 时,你 可 定义 一 个 或 多 个 可 选 的 构 造 函 数,当 创 建 本 类 的 一 个 对 象 时用 某 一 个 构 造 函 数 来 初 始 化 本 对 象。 用 前 面 的 程 序 例 子来 说 明,当ClassOne类 创 建 一 个 新 实 例 时, 所 有 成 员 函 数 和 变量 被 创 建(创 建 实 例)。 构 造 函 数 被 调 用。 ClassOne mc: mc = new ClassOne(); 关 键 词new用 来 创 建 一 个 类 的 实 例,一 个 类 用new初 始 化 ?reg; 前 并 不 占 用 内 存,它 只 是 一 个 类 型 定 义, 当mc对 象 初 始 化 后,mc对象 里 的i变 量 等 于10。 你 可 以 通 过 对 象 名 来 引 用 变 量i。(有 时称 ?reg; 为 实 例 变 量) mc.i++;//mc实 例 变 量 加1 因 为mc有ClassOne类的 所 有 变 量 和 成 员 函 数, 我 们 可 以 使 用 同 样 的 语 法 来 调用 成 员 函 数 Add_i: Add_i(10); 现 在mc.i变 量 等 于21. 结 束 函 数 Java并 不 支 持 析 构 函 数(C++里 的 定 义),因 为java本身 提 ?copy; 对 象 无 用 时 自 动 清 除 的 功 能,同 时 它 也 提 ?copy; 了 一 个 自 动 拉 圾 箱 的 成 员 函 数, 在 清 除 对 象 时 被 调 用: Protected void finalize() { close(); } 3.3 对 象 有 效 范 围 和 废 物 自 动 回 收 例 如: String s;//没 有 分 配 内 存 s = new String("oldstring");//分配 内 存 s ="newstring";//重 新 分 配 内 存(创 建 新 对 象) 我 们 将 在 以 后 访 问String类 时 将 更 加 明 白 它 的 工 作 过 程,但它 的 快 速 工 作 过 程 是 这 样 的: 1.创 建 一 个 新 的String类 对 象并 填 充 以"oldstring" 2.创 建 另 一 个String对 象 并 填 充以"newstring" 注 意 我 们 创 建 了 两 个 对 象。 Stirng 对 象 "oldstring" Stirng 对 象 "newstring" 在 第 三 条 语 句 里,第 一 个 包 括"oldstring"的 叫 做s的对 象 已 走 出 了 有 效 范 围,没 有 任 何 ?法 可 以 再 访 问 他,我 们现 在 有 一 个 新 的 对 象 也 叫s,包 含"newstring"。 在 下 一个 废 品 回 收 线 程,前 一 个 对 象 将 被 标 识 并 清 除。
3.4 子 类 class Zebra extends Horse { int number_OF_stripes: } 关 键 词extends来 定 义 对 象 有 的 子 类.Zebra是Horse的 子 类。Horse类里 的 所 有 特 征 都 将 拷 贝 到 Zebra类 里,而Zebra类 里 可 以 定 义 自己 的 成 员 函 数 和 实 例 变 量。Zebra称 为Horse的 派 生 类 或 继 承。另 外,你 也 许 还 想 覆 盖 基 类 的 成 员 函 数。 用ClassOne说 明,下 面是 一 个 派 生 类 覆 盖Add_i功 能 的 例 子. import ClassOne; public class NewClass extends ClassOne { public void Add_i(int j) { i=i+(j/2); } } 当NewClass类 的 实 例 创 建 时,变 量i初 始 化 值 为10,但 调 用Add_i产生 不 同 的 结 果。 NewClass mnc; mnc=new NewClass(); mnc.Add_i(10); 访 问 控 制 Java里 当 你 创 建 一 个 新 类 时,你 可 以 标 明 变 量 和成 员 函 数 的 访 问 层 次。 public public void AnyOneCanAccess(){} public实 例 变 量 和 成 员函 数 可 以 任 意 其 它 类 调 用。 protected protected void OnlySubClasses(){} protected实 例 变 量 和成 员 函 数 只 能 被 其 子 类 调 用. private private String CreditCardNumber; private实 例 变 量 和 成员 函 数 只 能 在 本 类 里 调 用. friendly void MyPackageMethod(){} 缺 省 的,如 果 没 有 定 义 任 何防 火 控 制,实 例 变 量 或 函 数 缺 省 定 义 成friendly,意 味 着 可 以被 本 包 里 的 任 意 对 象 防 问,但 其 它 包 里 的 对 象 不 可 防 问。 静 态 成 员 函 数 和 变 量 有 ?copy; 时 候,你 创 建 一 个 类,希 望这 个 类 的 所 有 实 例 都 公 用 一 个 变 量。 也 就 是 说,所 有 这 个类 的 对 象 都 只 有 实 例 变 量 的 同 一 个 拷 贝。 这 种 方 法 的 关键 词 是static, 例 如: class Block { static int number=50; } 所 有 从Block类 创 建 的 对 象 的number变 量 值 都 是 相 同 的。 无任 在 哪 个 对 象 里 改 变 了number的 值, 所 有 对 象 的number都 跟 着改 变。 同 样 的,你 可 以 定 义static成 员 函 数,但 这 个 成 员 函 数 不能 访 问 非static函 数 和 变 量。 class Block { static int number = 50; int localvalue; static void add_local(){ localvalue++;//没 有 运 行 } static void add_static() { number++;//运行 } } |
|
![]() ![]() |