📄 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 + -