?? java9.htm
字號:
<html>
<head>
<title>Java入門</title>
<style>
<!--
A:link {text-decoration: none; color: "blue"}
A:visited {text-decoration: none; color: "#000000"}
A:active {text-decoration: none;color:"black"}
A:hover {text-decoration: underline; color: ff0000}
-->
</style>
<style type="text/css">
<!--
p{font-size:9pt;line-height;13pt;}
td { font-size: 9pt ; line-height:13pt;
}
A{text-transform: none;
text-decoration: none;font-size: 9pt ; line-height:13pt;}
-->copyright fangame
</style>
</head>
<body bgcolor="#FFFFFF">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="100%">
<h3>第六章 對象、類、包和接口</h3>
<p>6.2.6構造方法</p>
<p>構造方法是一種特殊的方法。Java中的每個類都有構造方法,用來初始化該類的一個
新的對象。構造方法具有和類名相同的名稱,而且不返回任何據類型,在構造方法的實
現中,也可以進行方法重寫。</p>
<p>例6.5</p>
<p>class point{</p>
<p>int x,y;</p>
<p>point (){</p>
<p>x=0;y=0;</p>
<p>}</p>
<p>point (intx,inty){</p>
<p>this.x=x;this.y=y;</p>
<p>}</p>
<p>}</p>
<p>上例中,我們對類Point實現了兩個構造方法,方法名均為Point ,與類名相同。而且我們使
用了方法重寫,根據不同的參數分別對點的x、y坐標賦與不同的
回憶在例6.2中,我們曾用init()方法對點的x、y坐標進行初始 ?。二者完成相同的功能
,那么用構造方法的好處在哪里呢?</p>
<p>當用運算符new為一個對象分配內存時,要調用對象的構造方 法,而當創建一個對象時
,必須用new為它分配內存。因此用構造方法進行初始化避免了在
生成對象后每次都要調
用對象的初始化方法。如果沒有實現類的構造方法,則Java運行 另外,構造方法只能由new運算符調用。我們將在§6.3中進行
詳細介紹。對構造方法同</p>
<p>6.2.7finalize()方法</p>
<p>在對對象進行垃圾收集前,Java運行時系統回自動調用對象的
finalize()方法來釋放系統資</p>
<p>protected void finalize() throws throwable</p>
<p>finalize()方法在類java.lang.Object中實現。如果要在一個所定義
的類中實現該方法以釋放 該類所占用的資源(即要重載父類的finalize()方法),則在對該類所
使用的資源進行翻譯后,一 般要調用父類的finalize()方法以清除對象使用的所有資源,包括
?于繼承關系而獲得的資源</p>
<p>……//cleanupcodeforthisclass</p>
<p>super.finalize();</p>
<p>}</p>
<p>將在§6.4中講述,對類 java.lang.Ob-ject,我們也將在§6.4中講述。</p>
<p>遞 來進行交互(消息傳遞即
激活指定的某個對象的方法以改變其狀態或讓它產生一定的行 為),最終完成復雜的任務
我們分別講述:</p>
<p>對象的生成包括聲明、實例化和初始化三方面的內容。通 ?的格式為:
</p>
<p>1.type objectName;聲明了一個類型為type的對象。其中type是組 合類型(包括類和接口)。
對象的聲明并不為對象分配內存空間。</p>
<p>2對象的構造方法,返回對 該對象的一個引用(即該對象所在的內存地址)。用new可以為一?類實例化多個不同的對
象。這些對象分別占用不同的內存空間,因此改變其中一個對象
的狀態不會影響其它對象</p>
<p>3.生成對象的最后一步是執行構造方法,進行初始化。由于
對構造方法可以進行重寫 ,所以通過給出不同個數或類型的參數會分別調用不同的構造方
以例6.5中所定義的類Point為例,我們生成類Point的對象:</p>
<p>Point p1=new Point();</p>
<p>Point p2=new Point(5,10);</p>
<p>這里,我們為類Point生成了兩個對象p1、p2,它們分別調用不同
的構造方法,p1調用缺省 的構造方法(即沒有參數),p2則調用帶參數的構造方法。p1、p2分
雖然new運算符返回對一個對象的引用,但與C、C++中的指針不 同,對象的引用是指向
一個中間的數據結構,它存儲有關數據類型的信息以及當前對象
所在的堆的地址,而對于 對象所在的實際的內存地址是不可操作的,這就保證了安全性6.3.2對象的使用
對象的使用包括引用對象的成員變量和方法,通過運算符·
可以實現對變量的訪問和 方法的調用,變量和方法可以通過設定一定的訪問權限(見§6.6)
我們先定義一個類Point,它在例6.5的定義中添加了一些內容 ?</p>
<p>例6.6</p>
<p>class Point{</p>
<p>int x,y;</p>
<p>String name="a point";</p>
<p>Point(){</p>
<p>x=0;</p>
<p>y=0;</p>
<p>}</p>
<p>Point(int x,int y,String name){</p>
<p>this.x=x;</p>
<p>this.y=y;</p>
<p>this.name=name;</p>
<p>}</p>
<p>int getX(){</p>
<p>returnx;</p>
<p>}</p>
<p>int getY(){</p>
<p>return y;</p>
<p>}</p>
<p>void move(int newX,int newY){</p>
<p>x=newX;</p>
<p>y=newY;</p>
<p>}</p>
<p>Point newPoint(String name){</p>
<p>Point newP=new Point(-x,-y,name);</p>
<p>return newP;</p>
<p>}</p>
<p>boolean equal(int x,int y){</p>
<p>if(this.x==x&&this.y==y)</p>
<p>return true;</p>
<p>else</p>
<p>return false;</p>
<p>}</p>
<p>void print(){</p>
<p>System.out.println(name+":x="+x+"y="+y);</p>
<p>}</p>
<p>}</p>
<p>public class UsingObject{</p>
<p>public static void main(String args[]){</p>
<p>Point p=new Point();</p>
<p>p.print();//callmethodofanobject</p>
<p>p.move(50,50);</p>
<p>System.out.println("**after moving**");</p>
<p>System.out.println("Get x and y directly");</p>
<p>System.out.println("x="+p.x+"y="+p.y);//access variables of an
object</p>
<p>System.out.println("or Get x and y by calling method");</p>
<p>System.out.println("x="+p.getY()+"y="+p.getY());</p>
<p>if(p.equal(50,50))</p>
<p>System.out.println("I like this point!!!!");</p>
<p>else</p>
<p>System.out.println("I hate it!!!!!");</p>
<p>p.newPoint("a new point").print();</p>
<p>new Point(10,15,"anothernewpoint").print();</p>
<p>}</p>
<p>}</p>
<p>運行結果為:</p>
<p>C:\java UsingObject</p>
<p>a point:x=0y=0</p>
<p>****aftermoving*****</p>
<p>Get x and y directly</p>
<p>x=50 y=50</p>
<p>or Get x and y by calling method</p>
<p>x=50 y=50</p>
<p>I like this point!!!!</p>
<p>a new point:x=-50 y=-50</p>
<p>another newpoint:x=10 y=15</p>
<p>1.引用對象的變量</p>
<p>要訪問對象的某個變量,其格式為:</p>
<p>objectReference.variable</p>
<p>其中objectReference是對象的一個引用,它可以是一個已生成的 對象,也可以是能夠生成對
例如:我們用Pointp=new Point();生成了類Point的對象p后,可以用 p.x,p.y來訪問該點的x、y坐
</p>
<p>p.x=10; p.y=20;</p>
<p>或者用new生成對象的引用,然后直接訪問,如:</p>
<p>tx=new point().x;</p>
<p>2.調用對象的方法</p>
<p>要調用對象的某個方法,其格式為:</p>
<p>,但是通過方法調用的方 式來實現能更好地體現面向對象的特點,建議在可能的情況下盡
? 型 的值,我們可以合法地使 用這個值,如:例6.6中類Point的方法equal返回布爾值,我們可以用它
來作為判斷條件分別執行 </p>
<p>if(p.equal (20,30)){</p>
<p>……//statements when equal</p>
<p>}else{</p>
<p>……//statements when unequal</p>
<p>}</p>
<p>另外,類Point的方法newPoint返回該點關于原點的對稱點,返回 ?也是一個Point類型,我們
可以訪問它的變量或調用它的方法,如: px=p.newPoint().x或 px=p.newPoint().getX(); </p>
<p><a href="grade2.asp.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/grade2.asp.htm">目錄</a>
<ul>
<li><a HREF="java1.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java1.htm">Java入門(一)</a></li>
<li><a HREF="java2.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java2.htm" >Java入門(二)</a></li>
<li><a HREF="java3.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java3.htm">Java入門(三)</a></li>
<li><a HREF="java4.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java4.htm">Java入門(四)</a></li>
<li><a HREF="java5.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java5.htm">Java入門(五)</a></li>
<li><a HREF="java6.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java6.htm">Java入門(六)</a></li>
<li><a HREF="java7.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java7.htm">Java入門(七)</a></li>
<li><a HREF="java8.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java8.htm">Java入門(八)</a></li>
<li><a HREF="java9.htm" tppabs="http://www.xm.zz.ha.cn/wsxt/dn/java9.htm">Java入門(九)</a></li>
</ul>
</td>
</tr>
</table>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -