对象

对象的创建:

对象可以认为是在一类事物中抽象出某一个特例,通过这个特例来处理这类事物出现的问题。
Student s = new Student(String name);
1."new Student" 是以Student类为模板,在堆中创建一个对象;
2.()是创建对象后,立即调用Student类的构造函数,对刚生成的对象进行初始化。
3."Student s" 产生了一个Student类引用变量s。所谓Student类引用,就是以后可以用来指向Student对象的对象引用。
4.‘=’操作符使得对象引用指向刚创建的那个Student对象。
上面的语句可以分为下面两句:
Student s;  //对象引用变量   没有指向任何一个对象,null
s = new Student(String name);  //对象本身   指向了一个对象 
有两个变量,在堆空间里创建的实体,与在数据段以及栈空间里创建的实体不同。
一个类可以创建无数个对象,对象没有名字,没法直接访问它,可以通过对象引用来间接访问对象。
Student s1;
s = s1;   //是对象引用被复制了
这是两个对象引用指向了同一个对象。
s = new Student(String name);
s 该指向另一个对象,第一个对象就成为了垃圾回收机制的处理对象。

对象和对象引用是相互独立的,在存储空间中也是,对象引用存储在速度更快的栈中,对象一般存储在堆中。

这样来记这个问题
如下表达式:
A a1 = new A();

它代表A是类,a1是引用,a1不是对象,new A()才是对象,a1引用指向new A()这个对象。

1.在JAVA里,“=”不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。

2.JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。

3.在JAVA里,“=”语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。

再如:
A a2;
它代表A是类,a2是引用,a2不是对象,a2所指向的对象为空null;

再如:
a2 = a1;
它代表,a2是引用,a1也是引用,a1所指向的对象的地址传给了a2(传址),使得a2和a1指向了同一对象。

综上所述,可以简单的记为,在初始化时,“=”语句左边的是引用,右边new出来的是对象。在后面的左右都是引用的“=”语句时,左右的引用同时指向了右边引用所指向的对象。

再所谓实例,其实就是对象的同义词。

对象及对象引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值