概念:对象与对象引用
对象与对象引用的关系持续到对象被回收。
许多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");
浙公网安备 33010602011771号