BBS水木清华站∶精华区

发信人: FrankCH (小花花), 信区: Java 
标  题: Java教程(九) 
发信站: BBS 水木清华站 (Sun Jul 27 12:19:44 1997) 
 
 
JAVA程序设计语言讲座(第11讲)  
 
 
 
                                   郁欣 孙元 王曦东 王克宏  
 
 
 
                                  第 一 部 分 Java入 门  
 
                             第 六 章   对 象 、 类 、 包 和 接 口  
 
     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.2.7 finalize()方 法  
 
     在 对 对 象 进 行 垃 圾 收 集 前 ,Java运 行 时 系 统 回 自 动 调 用 对 象 的 
 finalize()方 法 来 释 放 系 统 资 
 
     protected void finalize() throws throwable  
 
     finalize()方 法 在 类 java.lang.Object中 实 现 。 如 果 要 在 一 个 所 定 义 
 的 类 中 实 现 该 方 法 以 释 放 
该 类 所 占 用 的 资 源 (即 要 重 载 父 类 的 finalize()方 法 ),则 在 对 该 类 所 
 使 用 的 资 源 进 行 翻 译 后 ,一 
般 要 调 用 父 类 的 finalize()方 法 以 清 除 对 象 使 用 的 所 有 资 源 ,包 括  
? 于 继 承 关 系 而 获 得 的 资 源 
 
    ……        // clean up code for this class 
    super. finalize(); 
    } 
 
 
 
 
  
将 在 § 6.4中 讲 述 ,对 类 
java.lang.Ob-ject,我 们 也 将 在 § 6.4中 讲 述 。  
 
 
 
递 
 来 进 行 交 互 (消 息 传 递 即 
激 活 指 定 的 某 个 对 象 的 方 法 以 改 变 其 状 态 或 让 它 产 生 一 定 的 行  
为 ),最 终 完 成 复 杂 的 任 务 
 
  
我 们 分 别 讲 述 : 
 
 
     对 象 的 生 成 包 括 声 明 、 实 例 化 和 初 始 化 三 方 面 的 内 容 。 通  
? 的 格 式 为 :  
 
 
 
     1. type objectName; 声 明 了 一 个 类 型 为 type的 对 象 。 其 中 type是 组  
合 类 型 (包 括 类 和 接 口 )。 
对 象 的 声 明 并 不 为 对 象 分 配 内 存 空 间 。  
 
  
对 象 的 构 造 方 法 ,返 回 对 
该 对 象 的 一 个 引 用 (即 该 对 象 所 在 的 内 存 地 址 )。 用 new可 以 为 一 ? 类 实 例 化 多 个 不 同 的 对 
象 。 这 些 对 象 分 别 占 用 不 同 的 内 存 空 间 ,因 此 改 变 其 中 一 个 对 象 
 的 状 态 不 会 影 响 其 它 对 象 
 
     3. 生 成 对 象 的 最 后 一 步 是 执 行 构 造 方 法 ,进 行 初 始 化 。 由 于  
对 构 造 方 法 可 以 进 行 重 写 
,所 以 通 过 给 出 不 同 个 数 或 类 型 的 参 数 会 分 别 调 用 不 同 的 构 造 方 
     以 例 6.5中 所 定 义 的 类 Point 为 例 ,我 们 生 成 类 Point的 对 象 :  
 
     Point p1 = new Point();  
 
     Point p2 = new Point(5,10);  
 
     这 里 ,我 们 为 类 Point生 成 了 两 个 对 象 p1、 p2,它 们 分 别 调 用 不 同 
 的 构 造 方 法 ,p1调 用 缺 省 
的 构 造 方 法 (即 没 有 参 数 ),p2则 调 用 带 参 数 的 构 造 方 法 。 p1、 p2 分 
 
     虽 然 new运 算 符 返 回 对 一 个 对 象 的 引 用 ,但 与 C、 C++中 的 指 针 不 
 同 ,对 象 的 引 用 是 指 向 
一 个 中 间 的 数 据 结 构 ,它 存 储 有 关 数 据 类 型 的 信 息 以 及 当 前 对 象 
 所 在 的 堆 的 地 址 ,而 对 于 
对 象 所 在 的 实 际 的 内 存 地 址 是 不 可 操 作 的 ,这 就 保 证 了 安 全 性      6.3.2 对 象 的 使 用  
 
     对 象 的 使 用 包 括 引 用 对 象 的 成 员 变 量 和 方 法 ,通 过 运 算 符 ·  
可 以 实 现 对 变 量 的 访 问 和 
方 法 的 调 用 ,变 量 和 方 法 可 以 通 过 设 定 一 定 的 访 问 权 限 (见 § 6.6) 
 
     我 们 先 定 义 一 个 类 Point,它 在 例 6.5的 定 义 中 添 加 了 一 些 内 容  
?  
 
    例6.6 
    class Point{ 
          int x,y; 
          String name = "a point"; 
          Point(){ 
                x = 0; 
                y = 0; 
          } 
          Point( int x, int y, String name ){ 
                this.x = x; 
                this.y = y; 
                this.name = name; 
          } 
          int getX(){ 
                return x; 
          } 
          int getY(){ 
                return y; 
          } 
          void move( int newX, int newY ){ 
                x = newX; 
                y = newY; 
          } 
          Point newPoint( String name ){ 
                Point newP = new Point( -x, -y, name ); 
                return newP; 
          } 
          boolean equal( int x, int y ){ 
                if( this.x==x && this.y==y ) 
                      return true; 
                else 
                      return false; 
          } 
          void print(){ 
                System.out.println(name+" :  x = "+x+"  y = "+y); 
          } 
    } 
    public class UsingObject{ 
          public static void main( String args[] ){ 
                Point p = new Point(); 
                p.print();        //call method of an object 
                p.move( 50, 50 ); 
                System.out.println("** after moving **"); 
                System.out.println("Get x and y directly"); 
                System.out.println("x = "+p.x+"  y = "+p.y);    //access variabl 
 
es of an object 
                System.out.println("or Get x and y by calling method"); 
                System.out.println("x = "+p.getY()+"  y = "+p.getY()); 
                if( p.equal(50,50) ) 
                      System.out.println("I like this point!!!! "); 
                else 
                      System.out.println("I hate it!!!!! "); 
                p.newPoint( "a new point" ).print(); 
                new Point( 10, 15, "another new point" ).print(); 
                      } 
    } 
    运行结果为: 
    C:\java UsingObject 
    a point :  x = 0  y = 0 
    **** after moving ***** 
    Get x and y directly 
    x = 50  y = 50 
    or Get x and y by calling method 
    x = 50  y = 50 
    I like this point!!!! 
    a new point :  x = -50  y = -50 
    another new point :  x = 10  y = 15 
 
 
     1. 引 用 对 象 的 变 量  
 
     要 访 问 对 象 的 某 个 变 量 ,其 格 式 为 :  
 
     objectReference.variable  
 
     其 中 objectReference是 对 象 的 一 个 引 用 ,它 可 以 是 一 个 已 生 成 的  
对 象 ,也 可 以 是 能 够 生 成 对 
 
     例 如 :我 们 用 Point p=new Point();生 成 了 类 Point的 对 象 p后 ,可 以 用  
p.x,p.y来 访 问 该 点 的 x、 y坐 
 
    p.x = 10;         p.y = 20; 
 
 
     或 者 用 new生 成 对 象 的 引 用 ,然 后 直 接 访 问 ,如 :  
 
     tx = new point().x;  
 
     2. 调 用 对 象 的 方 法  
     要 调 用 对 象 的 某 个 方 法 ,其 格 式 为 :  
 
 
 
 
 
 
 
 
  
,但 是 通 过 方 法 调 用 的 方 
式 来 实 现 能 更 好 地 体 现 面 向 对 象 的 特 点 ,建 议 在 可 能 的 情 况 下 尽 
 
?  
 
 
 
 
 
型 
 的 值 ,我 们 可 以 合 法 地 使 
用 这 个 值 ,如 :例 6.6中 类 Point的 方 法 equal返 回 布 尔 值 ,我 们 可 以 用 它 
 来 作 为 判 断 条 件 分 别 执 行 
 
    if (p.equal (20,30)){ 
          ……  //statements when equal 
    }else { 
          ……  //statements when unequal 
    } 
 
 
     另 外 ,类 Point的 方 法 newPoint返 回 该 点 关 于 原 点 的 对 称 点 ,返 回  
? 也 是 一 个 Point类 型 , 我 们 
可 以 访 问 它 的 变 量 或 调 用 它 的 方 法 ,如 :  
 
    px = p.newPoint().x           或 
    px = p.newPoint(). getX(); 
 
 
     (未 完 待 续 )  
 
 
 
 
-- 
           ^_^ ^_^ ^_^ ^_^ ^_^ ^_^^_^ ^_^ ^_^ ^_^ ^_^ ^_^^_^ ^_^ ^_^ ^_^ ^_^ ^_^^_^ ^_^ ^_^ ^_^ ^_^ ^_^^_^ ^_^ ^_^ ^_^ ^_^ ^_^^_^ ^_^ ^_^ ^_^ ^_^ ^_^ 
^_^ ^_^ ^_^ ^_^ ^_^ ^_^ [s[4;65HO[3;66HO[3;67HO[3;68HO[4;69HO[5;69HO[6;68HO[7;67HO[8;65HO[7;63HO[6;62HO[5;61HO[4;61HO[3;62HO[3;63HO[3;64HO[u 
              Welcome EveryOne! 
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.74.158] 

BBS水木清华站∶精华区