定义对象时为何要出现两次类名?

譬如,我们已声明了一个名叫Balloon的类。可以用下式来生成Balloon对象(这是Java或C++书里的惯用语。所谓Balloon对象,说得明白一点,就是以类Balloon为模板生成的对象。):

Balloon rope1 = new Balloon();

对这个语句,几乎所有的BBS里都有人问过:这个类名Balloon,为啥要出现两次?我也一直纳闷。后来觉得似乎有点懂了,写出来让大家批评。

其实,这条语句是个三步曲,就是包含着三个动作:创建一个Balloon对象;创建一个Balloon引用(所谓Balloon引用,是指能指向Balloon对象的引用。);使新创建的Balloon引用指向新创建的Balloon对象。

我们把它们分解开来看看。第1句:

Balloon rope1;

只创建一个Balloon引用。它没指向任何一个对象。第2句:

new Balloon();

创建了一个Balloon对象。但是,并没有将它和任何引用相关联。好比做了一个气球,但是没用绳子把它系住,它飞了。这个对象没法使用,成了内存里的垃圾,将由Java的垃圾收集机制来回收。

因此,三步曲里第2、3两步没法分割开,只能合在一起:

rope1 = new Balloon();

现在,我们对语句

Balloon rope1 = new Balloon();

里为何使用两个Balloon的问题,应该弄清楚了。左边的类名Balloon用来创建Balloon引用,右边的类名Balloon用来创建Balloon对象。两个各司其职,没有一个是多余的。

我把例子中的类命名为Balloon(气球),把对象引用命名为rope(绳子),暗喻了对象与引用之间的关系。

我们没有看到对象的名字(很多人把引用rope当作了对象),那是为什么呢?我以为,对象是采用动态分配(又叫堆分配)的方式在堆空间里创建的。对于在堆空间里的任何实体,尽管它们也是实实在在存在的,但是我们的代码对它们是看不见、摸不着。没法取名,取了名也没用。对象只能通过引用来访问。

可以有闲着的引用(没系上任何一个气球的绳子),不能有闲着的对象(没有一条绳子系住它)。没有任何一个引用指向的对象,就成了内存中的垃圾,将由Java的垃圾收集(Garbage Collection)机制回收。确切地说,一个对象,至少有一个引用指向它,也允许有多个引用同时指向它;一个引用,可以不指向对象,也可以指向一个(只能是一个)对象。

这些不光是在Java中,估计其它面向对象语言也差不多吧?

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值