楼主: keaide

JAVA入门教程

[复制链接]
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
31#
 楼主| 发表于 2006-8-2 22:03 | 只看该作者
二 、 一 维 数 组 元 素 的 引 用

定 义 了 一 个 数 组 ,并 用 运 算 符 new为 它 分 配 了 内 存 空 间 后 ,就 可 以 引 用 数 组 中 的 每 一 个
元 素 了 。 数 组 元 素 的 引 用 方 式 为 :

arrayName[index]

其 中 :index为 数 组 下 标 ,它 可 以 为 整 型 常 数 或 表 达 式 。 如 a[3] ,b(i为 整 型 ),c[6*I]等 。 下 标
从 0开 始 ,一 直 到 数 组 的 长 度 减 1。 对 于 上 面 例 子 中 的 in- tArray数 组 来 说 ,它 有 3个 元 素 ,分 别 为 :

intArray[0],intArray[1], intArray[2]。 注 意 :没 有 intArray[3]。

另 外 ,与 C、 C++中 不 同 ,Java对 数 组 元 素 要 进 行 越 界 检 查 以 保 证 安 全 性 。 同 时 ,对 于 每 个
数 组 都 有 一 个 属 性 length指 明 它 的 长 度 ,例 如 :intArray.length指 明 数 组 intArray的 长 度 。

例5.1
public class ArrayTest{
public static void main( String args[] ){
int i;
int a[]=new int[5];
for( i=0; i<5; i++ )
a=i;
for( i=a.length-1; i>=0; i-- )
System.out.println("a["+i+"] = "+a);
}
}
运行结果如下:
C:\>java ArrayTest
a[4] = 4
a[3] = 3
a[2] = 2
a[1] = 1
a[0] = 0

该 程 序 对 数 组 中 的 每 个 元 素 赋 值 ,然 后 按 逆 序 输 出 。

三 、 一 维 数 组 的 初 始 化

对 数 组 元 素 可 以 按 照 上 述 的 例 子 进 行 赋 值 。 也 可 以 在 定 义 数 组 的 同 时 进 行 初 始 化 。
例 如 :

int a[] = {1,2,3,4,5};

用 逗 号 (,)分 隔 数 组 的 各 个 元 素 ,系 统 自 动 为 数 组 分 配 一 定 的 空 间 。

与 C中 不 同 ,这 时 Java不 要 求 数 组 为 静 态 (static)。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
32#
 楼主| 发表于 2006-8-2 22:03 | 只看该作者
四 、 一 维 数 组 程 序 举 例 :

               例5.2 Fibonacci数列

Fibonacci数 列 的 定 义 为 :

F1 = F2 = 1, Fn = Fn-1 + Fn-2 (n>=3)

public class Fibonacci{

public static void main( String args[] ){

int i;

int f[]=new int[10];

f[0]=f[1]=1;

for( i=2; i<10; i++ )

f=f[i-1]+f[i-2];

for( i=1; i<=10; i++ )

System.out.println("F["+i+"]= "+f[i-1]);

}

}

运 行 结 果 为 :

C:\>java Fibonacci

F[1]= 1

F[2]= 1

F[3]= 2

F[4]= 3

F[5]= 5

F[6]= 8

F[7]= 13

F[8]= 21

F[9]= 34

F[10]= 55

例 5.3冒 泡 法 排 序 (从 小 到 大 )

冒 泡 法 排 序 对 相 邻 的 两 个 元 素 进 行 比 较 ,并 把 小 的 元 素 交 换 到 前 面 。

public class BubbleSort{

public static void main( String args[] ){

int i,j;

int intArray[]={30,1,-9,70,25};

int l=intArray.length;

for( i=0; i<l-1; i++)

for( j=i+1; j<l; j++ )

if( intArray>intArray[j] ){

int t=intArray;

intArray=intArray[j];

intArray[j]=t;

}

for( i=0; i<l; i++ )

System.out.println(intArray+" ";

}

}

运 行 结 果 为 :

C:\>java BubbleSort

-9

1

25

30

70]@@@

§ 5.2 多 维 数 组

与 C、 C++一 样 ,Java中 多 维 数 组 被 看 作 数 组 的 数 组 。 例 如 二 维 数 组 为 一 个 特 殊 的 一 维
数 组 ,其 每 个 元 素 又 是 一 个 一 维 数 组 。 下 面 我 们 主 要 以 二 维 数 组 为 例 来 进 行 说 明 ,高 维 的
情 况 是 类 似 的 。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
33#
 楼主| 发表于 2006-8-2 22:03 | 只看该作者
一 、 二 维 数 组 的 定 义

二 维 数 组 的 定 义 方 式 为 :

type arrayName[][];

例 如 :

int intArray[][];

与 一 维 数 组 一 样 ,这 时 对 数 组 元 素 也 没 有 分 配 内 存 空 间 ,同 样 要 使 用 运 算 符 new来 分 配
内 存 ,然 后 才 可 以 访 问 每 个 元 素 。

对 高 维 数 组 来 说 ,分 配 内 存 空 间 有 下 面 几 种 方 法 :

1 直 接 为 每 一 维 分 配 空 间 ,如 :

int a[][] = new int[2][3];

2 从 最 高 维 开 始 ,分 别 为 每 一 维 分 配 空 间 ,如 :

int a[][] = new int[2][];

a[0] = new int[3];

a[1] = new int[3];

完 成 1中 相 同 的 功 能 。 这 一 点 与 C、 C++是 不 同 的 ,在 C、 C++中 必 须 一 次 指 明 每 一 维 的
长 度 。

二 、 二 维 数 组 元 素 的 引 用

对 二 维 数 组 中 每 个 元 素 ,引 用 方 式 为 :arrayName[index1][index2]

其 中 index1、 index2为 下 标 ,可 为 整 型 常 数 或 表 达 式 ,如 a[2][3]等 。 同 样 ,每 一 维 的 下 标 都 从
0开 始 。

三 、 二 维 数 组 的 初 始 化

有 两 种 方 式 :

1 直 接 对 每 个 元 素 进 行 赋 值 。

2 在 定 义 数 组 的 同 时 进 行 初 始 化 。

如 :int a[][]={{2,3},{1,5},{3,4}};

定 义 了 一 个 3× 2的 数 组 ,并 对 每 个 元 素 赋 值 。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
34#
 楼主| 发表于 2006-8-2 22:03 | 只看该作者
四 、 二 维 数 组 举 例 :

例 5.4 矩 阵 相 乘

两 个 矩 阵 Am× n、 Bn× l相 乘 得 到 Cm× l,每 个 元 素 Cij = ? aik*bk j (i=1..m,n=1..n)

public class MatrixMultiply{
public static void main( String args[] ){
int i,j,k;
int a[][]=new int[2][3];
int b[][]={ {1,5,2,8},{5,9,10,-3},{2,7,-5,-18} };
int c[][]=new int[2][4];
for( i=0; i<2; i++ )
for( j=0; j<3; j++ )
a[j]=(i+1)*(j+2);
for( i=0; i<2; i++ ){
for( j=0; j<4; j++ ){
c[j]=0;
for( k=0; k<3; k++ )
c[j]+=a[k]*b[k][j];
}
}
System.out.println("\n*** Matrix A ***";
for( i=0; i<2; i++ ){
for( j=0; j<3; j++ )
System.out.print(a[j]+" ";
System.out.println();
}
System.out.println("\n*** Matrix B ***";
for( i=0; i<3; i++ ){
for( j=0; j<4; j++ )
System.out.print(b[j]+" ";
System.out.println();
}
System.out.println("\n*** Matrix C ***";
for( i=0; i<2; i++ ){
for( j=0; j<4; j++ )
System.out.print(c[j]+" ";
System.out.println();
}
}
}
其结果为:
C:\>java MatrixMultiply
*** Matrix A ***
2 3 4
4 6 8
*** Matrix B ***
1 5 2 8
5 9 10 -3
2 7 -5 -18
*** Matrix C ***
25 65 14 -65
50 130 28 -130 ?(未完待续)

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
35#
 楼主| 发表于 2006-8-2 22:04 | 只看该作者
在 前 面 几 章 中 ,我 们 对 Java的 简 单 数 据 类 型 、 数 组 、 运 算 符 和 表 达 式 以 及 流 控 制 方 法
作 了 详 细 的 介 绍 。 从 现 在 开 始 ,我 们 要 深 入 到 面 向 对 象 的 编 程 技 术 ,深 入 到 Java最 吸 引 人 的
地 方 。 本 章 中 ,我 们 首 先 讲 述 面 向 对 象 程 序 设 计 的 基 本 概 念 及 特 点 ,然 后 讨 论 Java中 的 类 、
对 象 、 包 和 接 口 ,最 后 进 行 小 结 ,给 出 一 个 完 整 的 Java文 件 的 格 式 。

§ 6.1 面 向 对 象 的 程 序 设 计

面 向 过 程 的 程 序 设 计 方 法 从 解 决 问 题 的 每 一 个 步 骤 入 手 ,它 适 合 于 解 决 比 较 小 的 简 单
问 题 。 C语 言 采 用 面 向 过 程 的 程 序 设 计 模 型 ,但 是 由 于 C本 身 几 乎 没 有 支 持 代 码 重 用 的 语 言
结 构 ,并 且 缺 乏 统 一 的 接 口 ,使 得 当 程 序 的 规 模 达 到 一 定 程 度 时 ,程 序 员 很 难 控 制 其 复 杂 性


面 向 对 象 的 程 序 设 计 方 法 则 按 照 现 实 世 界 的 特 点 来 管 理 复 杂 的 事 物 ,把 它 们 抽 象 为 对
象 ,具 有 自 己 的 状 态 和 行 为 ,通 过 对 消 息 的 反 应 来 完 成 一 定 的 任 务 。

6.1.1 对 象 、 类 和 消 息

一 个 对 象 就 是 变 量 和 相 关 的 方 法 的 集 合 ,其 中 变 量 表 明 对 象 的 状 态 ,方 法 表 明 对 象 所
具 有 的 行 为 ,下 图 表 示 了 一 个 对 象 的 特 征 :

从 图 中 可 以 看 出 ,一 个 对 象 的 变 量 构 成 这 个 对 象 的 核 心 ,包 围 在 它 外 面 的 方 法 使 这 个
对 象 和 其 它 对 象 分 离 开 来 。 例 如 :我 们 可 以 把 汽 车 抽 象 为 一 个 对 象 ,用 变 量 来 表 示 它 当 前 的
状 态 ,如 速 度 、 油 量 、 型 号 、 所 处 的 位 置 等 ,它 的 行 为 则 可 以 有 加 速 、 刹 车 、 换 挡 等 。 我
们 操 纵 汽 车 时 ,不 用 去 考 虑 汽 车 内 部 各 个 零 件 如 何 运 作 的 细 节 ,而 只 需 根 据 汽 车 可 能 的 行
为 使 用 相 应 的 方 法 即 可 。 实 际 上 ,面 向 对 象 的 程 序 设 计 实 现 了 对 对 象 的 封 装 ,使 我 们 不 必
关 心 对 象 的 行 为 是 如 何 实 现 的 这 样 一 些 细 节 。 通 过 对 对 象 的 封 装 ,实 现 了 模 块 化 和 信 息 隐
藏 ,有 利 于 程 序 的 可 移 植 性 和 安 全 性 ,同 时 也 利 于 对 复 杂 对 象 的 管 理 。

对 象 之 间 必 须 要 进 行 交 互 来 实 现 复 杂 的 行 为 。 例 如 ,要 使 汽 车 加 速 ,必 须 发 给 它 一 个
消 息 ,告 诉 它 进 行 何 种 动 作 (这 里 是 加 速 )以 及 实 现 这 种 动 作 所 需 的 参 数 (这 里 是 需 要 达 到 的
速 度 等 )。 下 图 表 示 了 对 象 A与 对 象 B间 的 消 息 传 递 过 程 。

从 图 中 可 以 看 出 ,一 个 消 息 包 含 三 个 方 面 的 内 容 :

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
36#
 楼主| 发表于 2006-8-2 22:04 | 只看该作者
●   消 息 的 接 收 者

●   接 收 对 象 应 采 用 的 方 法

●   方 法 所 需 要 的 参 数 。

同 时 ,接 收 消 息 的 对 象 在 执 行 相 应 的 方 法 后 ,可 能 会 给 发 送 消 息 的 对 象 返 回 一 些 信 息
(如 上 例 中 ,汽 车 的 仪 表 上 会 出 现 已 经 达 到 的 速 度 等 )。

由 于 任 何 一 个 对 象 的 所 有 行 为 都 可 以 用 方 法 来 描 述 ,通 过 消 息 机 制 就 可 以 完 全 实 现 对
象 之 间 的 交 互 ,同 时 ,处 于 不 同 处 理 过 程 甚 至 不 同 主 机 的 对 象 间 也 可 以 通 过 消 息 实 现 交 互


上 面 所 说 的 对 象 是 一 个 具 体 的 事 物 ,例 如 每 辆 汽 车 都 是 一 个 不 同 的 对 象 。 但 是 多 个 对
象 常 常 具 有 一 些 共 性 ,如 所 有 的 汽 车 都 有 轮 子 、 方 向 盘 、 常 具 有 一 些 共 性 ,如 所 有 的 汽 车
都 有 轮 子 、 方 向 盘 、 刹 车 装 置 等 。 于 是 我 们 抽 象 出 一 类 对 象 的 共 性 ,这 就 是 类 。 类 中 定 义
一 类 对 象 共 有 的 变 量 和 方 法 。 把 一 个 类 实 例 化 即 生 成 该 类 的 一 个 对 象 。 比 如 我 们 可 以 定
义 一 个 汽 车 类 来 描 述 所 有 汽 车 的 共 性 。 通 过 类 的 定 义 人 们 可 以 实 现 代 码 的 复 用 。 我 们 不
用 去 描 述 每 一 个 对 象 (如 某 辆 汽 车 ),而 是 通 过 创 建 类 (如 汽 车 类 )的 一 个 实 例 来 创 建 该 类 的 一
个 对 象 ,这 大 大 减 化 了 软 件 的 设 计 。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
37#
 楼主| 发表于 2006-8-2 22:04 | 只看该作者
6.1.2 继 承

通 过 对 象 、 类 ,我 们 实 现 了 封 装 ,通 过 子 类 我 们 可 以 实 现 继 承 。

对 于 上 例 来 说 ,公 共 汽 车 、 出 租 车 、 货 车 等 都 是 汽 车 ,但 它 们 是 不 同 的 汽 车 ,除 了 具 有
汽 车 的 共 性 外 ,它 们 还 具 有 自 己 的 特 点 (如 不 同 的 操 作 方 法 ,不 同 的 用 途 等 )。 这 时 我 们 可 以
把 它 们 作 为 汽 车 的 子 类 来 实 现 ,它 们 继 承 父 类 (汽 车 )的 所 有 状 态 和 行 为 ,同 时 增 加 自 己 的 状
态 和 行 为 。 通 过 父 类 和 子 类 ,我 们 实 现 了 类 的 的 层 次 ,可 以 从 最 一 般 的 类 开 始 ,逐 步 特 殊 化
,定 义 一 系 列 的 子 类 。 同 时 ,通 过 继 承 也 实 现 了 代 码 的 复 用 , 使 程 序 的 复 杂 性 线 性 地 增 长 ,而
不 是 呈 几 何 级 数 增 长 。

在 C++中 支 持 多 重 继 承 ,即 一 个 类 可 以 继 承 多 个 父 类 ,这 使 得 对 象 的 实 现 变 得 非 常 复 杂
且 不 可 预 料 (设 想 多 个 父 类 拥 有 某 些 相 同 的 变 量 和 方 法 )。 Java则 只 支 持 单 一 继 承 ,大 大 降 低
了 复 杂 度 。 在 Java中 通 过 接 口 可 以 实 现 多 重 继 承 ,但 接 口 的 概 念 更 简 单 ,使 用 更 方 便 ,而 且 不
仅 仅 限 于 继 承 ,它 使 多 个 不 相 关 的 类 可 以 具 有 相 同 的 方 法 。

6.1.3 多 态

Java通 过 方 法 重 写 和 方 法 重 载 来 实 现 多 态 。

通 过 方 法 重 写 ,一 个 类 中 可 以 有 多 个 具 有 相 同 名 字 的 方 法 , 由 传 递 给 它 们 的 不 同 个 数
和 类 型 的 参 数 来 决 定 使 用 哪 种 方 法 ,这 就 是 多 态 。 例 如 ,对 于 一 个 作 图 的 类 ,它 有 一 个
draw()方 法 用 来 画 图 或 输 出 文 字 ,我 们 可 以 传 递 给 它 一 个 字 符 串 、 一 个 矩 形 、 一 个 圆 形 ,甚
至 还 可 以 再 指 定 作 图 的 初 始 位 置 、 图 形 的 颜 色 等 ,对 于 每 一 种 实 现 ,只 需 实 现 一 个 新 的
draw()方 法 即 可 ,而 不 需 要 新 起 一 个 名 字 , 这 样 大 大 简 化 了 方 法 的 实 现 和 调 用 ,程 序 员 和 用 户
都 不 需 要 记 住 很 多 的 方 法 名 ,只 需 要 传 入 相 应 的 参 数 即 可 。

通 过 方 法 重 载 ,子 类 可 以 重 新 实 现 父 类 的 某 些 方 法 ,使 其 具 有 自 己 的 特 征 。 例 如 对 于
汽 车 类 的 加 速 方 法 ,其 子 类 (如 赛 车 )中 可 能 增 加 了 一 些 新 的 部 件 来 改 善 提 高 加 速 性 能 ,这 时
可 以 在 赛 车 类 中 重 载 父 类 的 加 速 方 法 。 重 载 隐 藏 了 父 类 的 方 法 ,使 子 类 拥 有 自 己 具 体 实 现
,更 进 一 步 表 明 了 与 父 类 相 比 ,子 类 所 具 有 的 特 殊 性 。

本 节 中 ,我 们 对 面 向 对 象 程 序 设 计 的 一 些 基 本 内 容 作 了 讲 解 ,下 面 我 们 就 分 别 讲 述
Java是 如 何 实 现 这 些 内 容 的 。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
38#
 楼主| 发表于 2006-8-2 22:04 | 只看该作者
§ 6.2 类

类 是 组 成 Java程 序 的 基 本 要 素 。 它 封 装 了 一 类 对 象 的 状 态 和 方 法 ,是 这 一 类 对 象 的 原
型 。 在 前 几 章 的 例 子 中 ,我 们 已 经 定 义 了 一 些 简 单 的 类 ,如 Hellowo rldApp类 。

public class HelloWorldApp{
public static void main( String args[ ] ){
System.out.println("Hello World !";
}
}
可以看出,一个类的实现包含两部分的内容:
classDeclaration {
classBody
}

下 面 我 们 分 别 对 每 一 部 分 详 细 讲 述 。

6.2.1 类 声 明

一 个 最 简 单 的 类 声 明 如 下 :

class className {
……
}
例如:
class Point{
……
}

同 时 ,在 类 声 明 中 还 可 以 包 含 类 的 父 类 ,类 所 实 现 的 接 口 以 及 修 饰 符 public、 abstract或
final。   我 们 将 分 别 在 后 面 的 几 节 中 介 绍 。

6.2.2 类 体

类 体 中 定 义 了 该 类 所 有 的 变 量 和 该 类 所 支 持 的 方 法 。 通 常 变 量 在 方 法 前 定 义 (并 不 一
定 要 求 ),如 下 所 示 :

class className {
memberVariableDeclarations
methodDeclarations
}

下 例 定 义 了 一 个 Point类 ,并 且 声 明 了 它 的 两 个 变 量 x、 y坐 标 ,同 时 实 现 init()方 法 对 x、 y赋
初 值 。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
39#
 楼主| 发表于 2006-8-2 22:04 | 只看该作者
例 6.1

class Ponit {
int x,y;
void init(int ix, int iy){
x=ix;
y=iy;
}
}

类 中 所 定 义 的 变 量 和 方 法 都 是 类 的 成 员 。 对 类 的 成 员 可 以 设 定 访 问 权 限 ,来 限 定 其 它
对 象 对 它 的 访 问 ,访 问 权 限 所 以 有 以 下 几 种 rivate, protected, publi c, friendly。 我 们 将 在 § 6.6中 详 细
讨 论 。

同 时 ,对 类 的 成 员 来 说 ,又 可 以 分 为 实 例 成 员 和 类 成 员 两 种 。 我 们 在 § 6.8中 详 细 讨 论 。

6.2.3 成 员 变 量

最 简 单 的 成 员 变 量 的 声 明 为 :

type variableName;

如 在 例 6.1中 所 声 明 的 变 量 ,int x,y;

成 员 变 量 的 类 型 可 以 是 Java中 的 任 意 数 据 类 型 包 括 简 单 类 型 、 数 组 、 类 和 接 口 。 在 一
个 类 中 ,成 员 变 量 应 该 是 唯 一 的 ,但 是 成 员 变 量 的 名 字 可 以 和 类 中 某 个 方 法 的 名 字 相 同 ,例
如 :

class Point{
int x,y;
int x(){
return x;
}
}

其 中 ,方 法 x()和 变 量 x具 有 相 同 的 名 字 。

类 的 成 员 变 量 和 在 方 法 中 所 声 明 的 局 部 变 量 是 不 同 的 ,成 员 变 量 的 作 用 域 是 整 个 类
,而 局 部 变 量 的 作 用 域 只 是 方 法 内 部 。

对 一 个 成 员 变 量 ,我 们 还 可 以 限 定 它 的 访 问 权 限 (见 § 6.6),用 static限 定 它 为 类 变 量 (见 §
6.7),或 者 用 以 下 的 修 饰 符 限 定 :

final:用 来 声 明 一 个 常 量 ,如 :

class FinalVar{
final int CONSTANT = 50;
……
}

例 中 声 明 了 常 量 CONSTANT, 并 赋 值 为 50。 对 于 用 final限 定 的 常 量 ,在 程 序 中 不 能 改 变 它
的 值 。 通 常 常 量 名 用 大 写 字 母 。

使用道具 举报

回复
论坛徽章:
456
ITPUB年度最佳版主
日期:2011-12-28 15:24:18马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14ITPUB年度最佳版主
日期:2014-02-19 10:05:27优秀写手
日期:2013-12-18 09:29:09ITPUB社区千里马徽章
日期:2013-06-09 10:15:34ITPUB年度最佳版主
日期:2013-01-30 17:30:25版主9段
日期:2012-07-03 02:21:03
40#
 楼主| 发表于 2006-8-2 22:05 | 只看该作者
(未 完 待 续 )6.2.6 构 造 方 法

构 造 方 法 是 一 种 特 殊 的 方 法 。 Java中 的 每 个 类 都 有 构 造 方 法 ,用 来 初 始 化 该 类 的 一 个
新 的 对 象 。 构 造 方 法 具 有 和 类 名 相 同 的 名 称 ,而 且 不 返 回 任 何 数 据 类 型 ,在 构 造 方 法 的 实
现 中 ,也 可 以 进 行 方 法 重 写 。

例6.5
class point {
int x,y;
point (){
x=0; y=0;
}
point (int x, int y){
this.x=x; this.y=y;
}
}

上 例 中 ,我 们 对 类 Point实 现 了 两 个 构 造 方 法 ,方 法 名 均 为 Poin t,与 类 名 相 同 。 而 且 我 们 使
用 了 方 法 重 写 ,根 据 不 同 的 参 数 分 别 对 点 的 x、 y坐 标 赋 与 不 同 的 初 值 。

回 忆 在 例 6.2中 ,我 们 曾 用 init()方 法 对 点 的 x、 y坐 标 进 行 初 始 化 。 二 者 完 成 相 同 的 功 能
,那 么 用 构 造 方 法 的 好 处 在 哪 里 呢 ?

当 用 运 算 符 new为 一 个 对 象 分 配 内 存 时 ,要 调 用 对 象 的 构 造 方 法 ,而 当 创 建 一 个 对 象 时
,必 须 用 new为 它 分 配 内 存 。 因 此 用 构 造 方 法 进 行 初 始 化 避 免 了 在 生 成 对 象 后 每 次 都 要 调
用 对 象 的 初 始 化 方 法 。 如 果 没 有 实 现 类 的 构 造 方 法 ,则 Java运 行 时 系 统 会 自 动 提 供 缺 省 的
构 造 方 法 ,它 没 有 任 何 参 数 。

另 外 ,构 造 方 法 只 能 由 new运 算 符 调 用 。 我 们 将 在 § 6.3中 进 行 详 细 介 绍 。 对 构 造 方 法 同
样 也 有 访 问 权 限 的 限 制 (见 § 6.6)。

6.2.7 finalize()方 法

在 对 对 象 进 行 垃 圾 收 集 前 ,Java运 行 时 系 统 回 自 动 调 用 对 象 的 finalize()方 法 来 释 放 系 统 资
源 ,如 打 开 的 文 件 或 socket。 该 方 法 的 声 明 必 须 如 下 所 示 :

protected void finalize() throws throwable

finalize()方 法 在 类 java.lang.Object中 实 现 。 如 果 要 在 一 个 所 定 义 的 类 中 实 现 该 方 法 以 释 放
该 类 所 占 用 的 资 源 (即 要 重 载 父 类 的 finalize()方 法 ),则 在 对 该 类 所 使 用 的 资 源 进 行 翻 译 后 ,一
般 要 调 用 父 类 的 finalize()方 法 以 清 除 对 象 使 用 的 所 有 资 源 ,包 括 由 于 继 承 关 系 而 获 得 的 资 源
。 通 常 的 格 式 应 为 :

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表