没有对象,就NEW一个

2014.2.14日,这一天是一个较为特殊的日子。不仅因为它是西方情人节还因为这是19年才一次的农历元宵节和夏历情人节同一天呢。对于屌丝的程序员来说,当然还是过元宵节更好,因为没有对象,但也会有人想方设法。。。没对象就NEW一个。
程序员眼里的对象和现实生活中的对象是一个概念么?有时候是,有时候不是。
根据汉语词典里的解释:对象,指行动或思考时作为目标的事物或特指恋爱的对方等含义。情人节里的对象毋庸置疑就是特指恋爱的对方。而这个释义的前者可能就和程序员(java OOP)眼里对象颇有些相似。只是在这里就不应该是行动和思考了而应该是引用了吧。
(接下来的对象都是程序员(java OOP)眼里的对象)
首先呢,闲谈一下什么是对象。
对象?什么都可以是对象,但凡是在现实生活中只要是一个具体的物体或者具体的事物就是一个对象。通俗的来说就是只要是你眼睛能看到的,手能感触到的,。。。都是对象。比如一台DELL Inspiron15R笔记本,一辆奥迪 A6L 3.5T轿车,一个一笑满脸酒窝说话大大咧咧的男孩子。。。只要是特定到具体的某一个的实物,便就是对象。然而在生活中我们是如何来描述一个对象的呢?
某一台电脑:
特征:型号,品牌,形状,大小,重量,...
功能,用途,行为:编程,玩游戏,打字,聊天,....
某一个人:
特征:外貌,性格,学历,专业,职业,姓名,年龄,身高,体重,性别,...
行为:走路,思考,吃饭,睡觉,学习,玩,...
也就是说对象不仅有其特征还应该会有他的功能或者行为。(行为就可以转变成功能)
接下来讲一下对象和对象引用的区别。
在某些书上会把这两个概念混为一体,但其实不然。
为便于说明,我们来用一个代码来举例。
// 创建一个学生对象
Student st1 = new Student();
拆开:
Student st1;// 声明一个Student类型的变量st1
st1 = new Student();// 将st1这个变量名指向新建的一个Student对象
// st1这个变量名以后就指代着Student类的具体的一个对象

1.”new Student()”是以Student类为模板,在堆空间里创建一个Student类对象
(也简称为Student对象)。
2.末尾的()意味着,在对象创建后,立即调用Student类的构造函数,对刚生成的对
象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造
函数。
3.左边的“Student st1”创建了一个Student 类引用变量。所谓Studnet类引用,就是以
后可以用来指向Student对象的对象引用。
4.“=”操作符使对象引用指向刚创建的那个Student对象。
也就是说有两个实体:一是对象引用变量,一是对象本身。

为了形象地说明对象、引用及它们之间的关系,可以做一个或许不很妥当的比喻。对象好比是一只很大的气球,大到我们抓不住它。引用变量是一根绳,可以用来系汽球。

如果只执行了第一条语句,还没执行第二条,此时创建的引用变量st1还没指向任何一个对象,它的值是null。引用变量可以指向某个对象,或者为null。它是一根绳,一根还没有系上任何一个汽球的绳。执行了第二句后,一只新汽球做出来了,并被系在st1这根绳上。我们抓住这根绳,就等于抓住了那只汽球。
再来一句:
Student st2;
就又做了一根绳,还没系上汽球。如果再加一句:
st2 = st1;
系上了。这里,发生了复制行为。但是,要说明的是,对象本身并没有被复制,被复制的只是对象引用。结果是,st2也指向了st1所指向的对象。两根绳系的是同一只汽球。
如果用下句再创建一个对象:
st2 = new Student();则引用变量st2改指向第二个对象。
从以上叙述再推演下去,我们可以获得以下结论:(1)一个对象引用可以指向0个或1个对象(一根绳子可以不系汽球,也可以系一个汽球);(2)一个对象可以有N个引用指向它(可以有N条绳子系住一个汽球)。
如果再来下面语句:
st1 = st2;
按上面的推断,st1也指向了第二个对象。这个没问题。问题是第一个对象呢?没有一条绳子系住它,它飞了。多数书里说,它被Java的垃圾回收机制回收了。这不确切。正确地说,它已成为垃圾回收机制的处理对象。至于什么时候真正被回收,那要看垃圾回收机制的心情了。(部分内容转载至网易博客)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值