分享
 
 
 

JAVA程序员必读:基础篇(5)

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

Java程序员必读:基础篇时间:2001/09/13 13:31作者:ZSC 太平洋网络学院

2.4实例和类成员

2.4.1理解实例和类成员

下面具体讨论一下实例和类成员,具体涉及变量和方法以及类变量和方法:

你这样声明一个成员变量,比如在类Myclass中有一个float型的aFloat:

class MyClass {

float aFloat;

}

这样你就声明一个实例变量。每次你创建一个类的实例的时候,系统就为实例创建了类的每一个实例变量的副本。你可以从对象中访问对象的实例变量。

实例变量跟类变量是不一样的,类变量示使用静态修改量来声明的。不管类创建了多少个实例,系统为每个类变量分配了类变量。系统为类变量分配的内存是在它第一次调用类的时候发生的。所有的实例共享了类的类变量的相同副本。你可以通过实例或者通过类本身来访问类变量。

它们的方法是类似的:你的类可以有实例方法和类方法。实例方法是对当前对象的实例变量进行操作的,而且访问类变量。另外一个方法,类方法不能访问定义在类中的实例变量,除非它们创建一个新的对象并通过对象来访问它们。同样,类方法可以在类中被调用,你不必需要一个实例来调用一个类方法。

缺省地,除非其它的成员被指定,一个定义在类中成员就是一个实例成员。这个在下面定义的类有一个实例变量,有一个整型的x,两个实例方法x和setX,它们设置其它对象以及查询x的数值。

class AnIntegerNamedX {

int x;

public int x() {

return x;

}

public void setX(int newX) {

x = newX;

}

}

每次你从一个类实例化一个新的对象,你可以得到每个类的实例变量的副本。这些副本都是跟新对象有关系的。因此,每次你从这个类实例化一个新的AnIntegerNamedX对象的时候,你得以得到跟新的AnIntegerNamedX对象有关的新副本。

一个类的所有实例共享一个实例方法的相同的实行;所有的AnIntegerNamedX实例都共享x和setX的相同执行。这里注重,两个方法x和setX是指对象的实例变量x。但是,你可能会问:假如所有AnIntergerNamedX共享x和setX的相同执行,会不会造成模棱两可的状态?答案当然是:不是。在实例方法中,实例变量的名字是指当前对象的实例变量,假如实例变量不是由一个方法参数来隐藏的。这样在x和setX中,x就等价于这个x,而不会造成混乱。

对于AnIntegerNamedX外部的对象假如想访问x,它必须通过特定的AnIntegerNamedX的实例来实现。假如这个代码片段处在其它对象的方法中。它创建了两种不同类型的AnIntegerNamedX,它设置了x为不同的数值,然后显示它们:

AnIntegerNamedX myX = new AnIntegerNamedX();

AnIntegerNamedX anotherX = new AnIntegerNamedX();

myX.setX(1);

anotherX.x = 2;

System.out.println("myX.x = " + myX.x());

System.out.println("anotherX.x = " + anotherX.x());

这里注重,代码使用setX来为myX设置x的值,而直接给anotherX.x指定一个数值。不管用什么方法,代码是在操作两个不同的x副本:一个包含在myX对象中一,另外一个包含在anotherX对象中。其输出是用以下代码片段来实现的:

myX.x = 1

anotherX.x = 2

上面代码显示了类AnIntegerNamedX的每一个实例有自己实例变量x的副本以及每个x有自己的数值。

你可以在声明成员变量的时候,指定变量是一个类变量而不是一个实例变量。相似地,你可以指定方法是一个类方法而不是一个实例方法。系统在第一次调用类来定义变量的时候创建了一个类变量的副本。所有的类实例共享了类变量的相同副本。类方法可以只操作类变量,它们不能访问定义在类中的实例变量。

为了指定一个成员变量为一个类变量,你可以使用static要害字。比如,我们可以修改一下上面的AnIntegerNamedX类,使得x变量现在是一个类变量:

class AnIntegerNamedX {

static int x;

public int x() {

return x;

}

public void setX(int newX) {

x = newX;

}

}

现在设置它们的x数值并显示不同的输出:

myX.x = 2

anotherX.x = 2

这次的输出不同,是因为x现在是一个类变量,所以就只有这个变量的副本,它是被AnIntegerNamedX的所有实例所共享的,包括myX和anotherX。当你在其它实例中调用setX的时候,你可以为所有的AnIntegerNamedX的所有实例改变x的数值。

同样,当我们声明一个方法的时候,你可以指定方法为类方法而不是实例方法。类方法只可以在类变量中进行操作,并且不能访问定义在类中的所有实例变量。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有