谈到引用,顾名思义,就在引用一个东东,这个东东就是内存地址,扯到内存地址了,那就复杂咯。还是从实际帮你分析。
class Picture {
int width;
int length;
......
}
Picture(int x,int y)
{
width=x;
lenth=y;
}
Picture pic = new Picture(3, 4);
1:为什么要使用到类?
这里创建了Picture类,类就是一个模子,是一个制造Picture图片的模子,java里面为什么要有类?如果没有类,我们表示一张图片的时候,要申明一个宽width1,长length1等等属性,我们表示第二张图片的时间,又要申明一个宽width2,长length2,申明N张图片,不晓得申明多少个宽和长咯,好累哦。
有了类,就方便啦,Picture pic1= new Picture();Picture pic2..Picture pic3....;调用属性 就这样pic1.width,pic2.width,是不很方便,这里是为什么要使用到类的原因。
2:讲下实例,对象,对象的引用;
你定义完了一个Picture类的时候,里面的长,宽的属性并没被分配格子来储存这2个属性,定义的Picture类 仅仅是一个模型,不是实实在在的图片,java里面通过new来制造真正的图片,new Picture(3,4)是制造了一个宽为3,长为4的图片,于是乎,我们就可以通过new Picture(3,4)来调用 这个图片的属性啦,new Picture(3,4).width,new Picture(3,4).length。
你可能有疑问了,为什么用new Picture(3,4),后面的Picture(3,4)是什么?,其实它是初始化Picture的宽和长这2个属性,你想想,你定义一张真实的图片的同时,肯定要设计好宽 和长的大小啦。所以new 后面紧跟Picture(3,4),这个构造函数。有些教科书关于实例说的很不清楚,实际上,从上面看new Picture(3,4)就一个实例了,是一个实实在在的图片!
继续分析,我每次调用属性,总要new Picture(3,4).length,是不是太长了?
找个东西来代替new Picture(3,4)吧,我们就用pic1代替new Picture(3,4),那么调用属性就只需要pic1.length啦,pic1这个变量如何申明?Picture pic1,就这样申明啦!于是我们把他们等号起来Picture pic1=new Picture(3,4);那么就可以说pic1就是紧挨着后面等于的new Picture(3,4)这个对象,为什么是紧挨的呢?同样大小的照片可以有很多张,于是我们可以再new Picture(3,4) NEW一个图片出来,也是宽为3,长为4的,我后面new 出来的图片 就不等于 前面的pic1了。在Picture pic1=new Picture(3,4);中pic1是对象,或者叫它实例,后面紧挨的new Picture(3,4)也是对象,或者也叫它实例,它们2个是等价的。
那么对象的引用是?前面说,我们是用pic1代替new Picture(3,4),那么就可以说pic引用了紧挨着等号后面的那个实例图片或者对象,所以pic1也称为引用。
现在做总结:pic1是对象,是实例,还是这个对象的引用;new Picture(3,4)是一个实实在在的图片,只能是对象或者称为实例,不能称为引用!
-pic1其实存储了一个字节的内存地址,这个地址 就是new Picture(3,4)堆内存地址的第一个地址,也就是首地址-专业术语叫做,pic1指向了 new Picture(3,4)堆内存地址的首地址。