概念:对象与对象引用

 

对象与对象引用的关系持续到对象被回收
 
许多Java书中把对象与对象的引用混为一谈,这里具体分析下:
首先定义一个简单的类 Car:
class Car {
	int id;
	String name;
	double price;
}
创建对象:
Car car1 = new Car();

包含了四个动作:

1、右边的"new Car",是以Car类为模板在堆空间里创建一个Car类对象。
2、末尾的"()",指对象创建后,立即调用Car类的构造函数,对刚生成的对象进行初始化。
3、左边的"Car car1",创建了一个Car类的引用变量。
4、"=",指使对象引用指向刚创建的Car类对象。
 

把简单类拆成两部分:
Car car1;
car1 = new Car();

这样就很清楚了,一个是对象引用变量,一个是对象本身。

 


     Car类可以创建无数个对象,这些对象没有名字,不能直接访问,只能通过对象引用来间接访问对象
     为了形象地说明对象、引用及它们之间的关系,可以做一个或许不很妥当的比喻。对象好比是一只很大的气球,大到我们抓不住它。引用变量是一根绳,可以用来系汽球。
     如果只执行了第一条语句,还没执行第二条,此时创建的引用变量car1还没指向任何一个对象,它的值是null。引用变量可以指向某个对象,或者为null。
     它是一根绳,一根还没有系上任何一个汽球的绳。执行了第二句后,一只新汽球做出来了,并被系在car1这根绳上。我们抓住这根绳,就等于抓住了那只汽球。
 

再创建一个Car对象:
Car car2;

又做了一根绳子,还没系上气球。如果再加上一句:

car2 = car1;

系上了。

这里发生了复制行为。但是,要说明的是,对象本身并没有被复制,复制的只是对象引用
结果是,car2也指向了car1指向的对象,两个绳子系的是同一个气球。
 

如果再创建一个对象:
car2 = new Car();

引用变量car2改变,指向了第二个对象。

从以上可获得以下结论:
1、一个对象引用可以指向0个或1个对象,(一根绳子可以不系汽球,也可以系一个汽球)
2、一个对象可以有N个引用指向它。(可以有N条绳子系住一个汽球)
 
如果在写下面的语句:
car1 = car2;

car1也指向了第二个对象。

第一个对象呢?没有绳子系住的气球飞走了。它已成为垃圾回收机制处理的对象。
 

匿名对象:只有对象没有对象引用的对象。
new Car();

如果仅仅为了打印而生成一个对象,就不需要用引用变量来系住它。

最常见的就是打印字符串:
System.out.println("I am java");
posted @ 2016-01-20 17:32  *猫斯基  阅读(29)  评论(0)    收藏  举报