2024年面向对象程序设计第二部分_第1页
2024年面向对象程序设计第二部分_第2页
2024年面向对象程序设计第二部分_第3页
2024年面向对象程序设计第二部分_第4页
2024年面向对象程序设计第二部分_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

注:假如你的类里定义了一个或多个结构措施,那么Java不提供默认的结构措施.

上述例子2提供了结构措施,下列创建对象是非法的:

pI=newPoint();

对象的内存模型

3、对象的内存模型

我们使用前面的例了T来阐明对象的内存模型.

(1)申明对象时的内存模型.

当用XiyoujiRenwuzhiibajie类申明一个变量zhubajie,即对象zhubajie时,如例子1中

XiyoujiRenwuzhubajie;内存模型如图所示:

zhubajie

申明对象变量zhubajie后,zhubajie的内存中还没有任何数据,我们称这时zhubajie是一个空

对象,空对象不能使用,因为它还没有得到任何“实体”.必须再进行为对象分派内存的步骤,

即为对象分派实体

(2)对象分派内存后的内存模型

当系统见到zhubajie=newXiyoujiRenwu();时,就会做两件事

(a)为height,weight,head,ear,nioutli,hand,foot各个变量分派内存.即

XiyoujiRenwu类的组员变量被分派内存空间.假如组员变量在申明时没有指定初值,那

么,对于整型变量,默认初值是(),对于浮点型,默认初值是0。对于booean型,默认初值是false,

对于引用型,默认初值是null.

(b)给出一个信息,已确保这些变量是属丁•对象zhubajie的,即这些内存单元将由zhubaj沁操作

(3)创建多个不一样的对象

一个类通过使用new运算符能够创建多个不--样的对象,这些对象将被分派不一样的内

存空间,因此,变化其中一个对象的状态不会影响其他对象的状态.

zhubajie=newXiyoujiRenwu。;

sunwukong=newXiyoujiRenwu。:

weight

height

head

ear

mxith

hand

foot

图43创建多个对象

4.3.2.使用对象

对象不但能够操作自己的变量变化状态,并且还拥有了使用创建它的那个类中的措施的能力,

对象通过使用这些措施能够产生一定的行为.通过使用运兑符”对象能够实现对自己的变

量访问和措施的调用.

(1)、对象操作自己的变量(对象的属性)

对象创建之后,就有了自己的变量,即对象的实体.通过使用运完符"对象能够实现对

自己的变量的访问.

(2)、对象调用类中的措施-对象的功效

对象创建之后,能够使用运算符”调用创建它的类中的措施,从而产生一定的行为功效.

当对象调用类中的一个措施时,措施中的局部变量被分派闪存空间.措施执行完成,局部

变量即刻释放内存.

classStudent{

floatmath,english,sum;

floatf(floatk1,floatk2){

sum=kl*math+k2*cnglish;

returnsum;

}

)

publicclassExample{

publicstaticvoidmain(Stringargs[]){

Studentwanghong,lihong;

wanghong=newStudent。;

lihong=newStudentO;

wanghong.math=60.0f;

wanghong.english=80f;

lihong.math=70.0f:

lihong.english=90.0f;

wanghong.sum=wanghong.f(2.0f,2.0f);

lihong.sum=lihong.f(2.0f.2.0f);

Systcm.ou(.prindn("lihongsum="+lihong.sum);

System.out.printlnC'wLinghongsum="+wanghong.sum);

I

)

4.3.3.对象的引用和实体

我们已经懂得,当用类创建一个对象时,类中的组员变量被分派内存空间,这些内存空间

称做该对象的实体,而对象中存储着引用,以确保实体由该对象操作使用.

publicclassPoint{

intx.y;

Point(inta,intb){

x=a;

y=b:

)

publicstaticvoidmain(Stringargs[]){

Pointp1=newPoint。2,16);

Pointp2=newPoint(6,18);

pl=p2;

System.out.println(pl.x);

System.oui.println(p2.x);

图48对坡内存程式

4.4static核心字

4.4.1.实例变量和类变量的区分

在讲述类的时候我们讲过:类体的定义包括组员变量的定义和措施的定义,并且组员变量

乂分为实例变量和类变量,用static修饰的变量是类变量.那么类变量和实例变量有什么区分

呢?

我们已经懂得:一个类通过使用new运算符能够创建多个不一样的对象,这些对象将被分派不

一样的内存空间,目前再说得准确些就是:不一样的对象的实例变量将被分派不一样的内存空

间,假如类中的组员变量有类变量,那么所有的对象的这个类变量都分派给相同的一处内存,

变化其中一个对象的这个类变量会影响其他对象的这个类变量.

也就是说对象共享类变量.

classTakecare

(

staticin(x;

inty;

)

classA

TakccarcAI=ncwTakccareO:

TakecareA2=newTakecareO;

Al.x=18

这时假如输出Al.x,A2.x的值,成果相同都是18

ra1.10内〃楼式

见例子StaticTest.java

当Java程序执行时,类的字节码文献被加载到内存,假如该类没有创建对象,类的实例组员变

量不会被分派内存.不过,类中的类变量,在该类被加载到内存时,就分派了对应的内存空间.假

如该类创建对象,那么不一样对象的实例变量互不相同,即分派不一样的内存空间,而类变量

不再更新分派内存,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,

类变量的内存空间直到程序退出运行,才释放所占有的内存.

4.4.2.通过类名直接访问类变量

类变量在类的字节码加载到内存时就分派了内存空间,并且被所有的对象共享,因此Java

语言允许通过类名直接访问类变量.

classStatictcst2{

staticinta=l;

}

classPoint{

publicstaticvoidmain(Stringargs[]){

intc=Statictest2.a;

Systcin.ou(.prin(ln(c);

4.4.3.实例措施和类措施的区分

当类的字节码文献被加载到内存时,类的实例措施不会被分派入口地址,当该类创建对象

后,类中的实例措施才分派入口地址,从而实例措施能够被类创建的任何对象调用执行.需要

注意的是,当我们创建第一个对象时,类中的实例措施就分派了入口地址,当再创建对象时,不

再分派入口地址,也就是说,措施的入口地址被所有的对象共享,当所有的对象都不存在时,措

施的入口地址才被取消.

对于类中的类措施,在该类被加载到内存时,类措施就分派了对应的入口地址.从而类措

施不但能够被类创建的任何对象调用执行,也能够直接通过类名调用•类措施的入口地址直到

程序退出才被取消.

无论是类措施或实例措施,当被调用执行时,措施中的局部变量才被分派内存空间,措施

调用完成,局部变量即刻释放所占的内存.

4.4.4.通过类名直接调用类措施

类措施在类的字节码加载到内存时就分派了入口地址,因此Java语言允许通过类名直

接调用类措施,而实例措施不能通过类名调用.在讲述类的时候我们强调过,在Java语言中,类

中的类措施不能够操作实例变量,也不能够调用实例措施,这是因为,在类创建对象之前,实例

组员变量还没有分派内存,实例措施也没有入口地址

classA

intx,y;〃实例变量

staticintz;〃类变量

staticfloatf(inta){〃类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论