【JAVA基础】引用变量
来源:互联网 发布:sql cursor用法 编辑:程序博客网 时间:2024/06/05 10:22
对象和对象的引用,是不是一回事?答:不是;
1、定义一个类,做模板:
class Vehicle { int passengers; int fuelcap; int mpg; }
2、创建对象
Vehicle veh1 = new Vehicle();
创建一个对象,包含了四个动作,我们语句拆分进行解释:
Vehicle veh1;
Veh1=new Vehicle();
(1)newVehicle:以Vehicle类为模板,在堆空间里创建一个Vehicle类对象(也简称为Vehicle对象)。
(2)末尾的():在对象创建后,立即调用Vehicle类的构造函数,对刚生成的对象进行初始化。构造函数是肯定有的。如果你没写,Java会给你补上一个默认的构造函数。
(3)Vehicle veh1:创建了一个Vehicle类引用变量。
所谓Vehicle类引用,就是以后可以用来指向Vehicle对象的对象引用,也只能指向用Vehicle模板实例化的对象。
(4)“=”:指向
使对象引用(Vehicleveh1)指向刚创建的那个Vehicle对象(newVehicle)。
在这个过程中,有两个实体:对象引用变量,对象本身。一个Vehicle类可以据此创建出无数个对象,这些对象不可能全叫“Vehicle”。为了访问我们创建的对象,只能通过对象引用来间接访问对象。
3、举个例子:
汽车厂生产的汽车相当于创建的对象,没有指明要用去做什么;
现在需要为由北京开往上海的路途配置汽车,由北京开往上海的汽车是一个引用变量。我们将汽车厂生产的汽车用作由北京开往上海的汽车。这个过程就是“=”发挥作用的过程。
而如果只执行了 Vehicle veh1,还没执行第二条,此时创建的引用变量veh1还没指向任何一个对象,它的值是null。引用变量可以指向某个对象,或者为null。就相当于我们只是提出了需要配置从北京开往上海的汽车,但此时并没有汽车,这时候,空指针异常就出现了。
4、推理:
(1)Vehicle veh2;
veh2 = veh1;
此时,发生了复制。但是,要说明的是,对象本身并没有被复制,被复制的只是对象引用。结果是,veh2也指向了veh1所指向的对象。
(2)继续执行
veh2 = new Vehicle();
引用变量veh2改指向第二个对象。
(3)继续执行
veh1 = veh2;
按上面的推断,veh1也指向了第二个对象。这个没问题。问题是第一个对象呢?
答:它已成为垃圾回收机制的处理对象。
5、探索:
照这样的推理,newVehicle()的存在,就是不合理的,因为,生产了汽车,但是没有用。。。“费车”?
答:NO,如果我们仅仅为了打印而生成一个对象,就不需要用引用变量来指向它。最常见的就是打印字符串:
System.out.println(“I am Java!”);
字符串对象“I amJava!”在打印后即被丢弃。有人把这种对象称之为临时对象。对象与引用的关系将持续到对象回收,Java在运行时才处理别名引用。
- 【JAVA基础】引用变量
- JAVA基础 引用类型变量和基本类型变量
- Java基础-基本类型变量和引用类型变量
- java中引用变量
- java引用与变量
- JAVA之变量引用
- 第二天:基础变量和引用变量
- Java基础-----Java引用
- 【Java基础】Java变量
- Java基础之引用
- JAVA基础之引用
- Java 基础之引用
- Java局部变量的引用
- Java引用变量的类型
- java引用变量和堆栈
- JAVA对象、对象引用变量
- Java对象和引用变量
- Java中的引用变量详谈
- 机房合作感想
- SVN学习笔记
- 分析String在内存中的表现
- hadoop之hdfs
- Tomcat context.xml配置详解
- 【JAVA基础】引用变量
- 负载均衡--LVS安装配置
- 从Openfiler引出的存储体系学习
- 微信开发一(与自己的后台交互)
- Writing A Threadpool in Rus
- 学生总结(三)variant与mrc.bookmark
- spring-data
- 深复制、浅复制
- React 组件生命周期