java 初识对象和对象引用的关系
在接触java之前就知道了java的对象引用,但概念一直很模糊,看了《Head First in Java》后觉得书中的例子很有趣,便分享给大家。
首先要搞清对象引用
是什么?
我们都知道变量可以存放数据,就像杯子一样,不同大小的杯子存放不同种类的饮料:
但是对象却是一类特殊的数据类型,在实例化一个对象时,是将对象分配到“堆”的存储空间的:
而对象引用的作用就像“遥控器”一样去间接地指挥对象工作:
对象与引用的“前世今生”
明白了上述概念后,就能简单通过下例搞明白,在对象创建过程中引用究竟和对象是怎样联系在一起的。
有如下实例:
1、声明一个引用变量
Dog myDog
= new Dog();
jvm(java虚拟机)分配空间给Dog类型的引用变量myDog,换言之,它是一个只能控制Dog的遥控器
2、创建对象
Dog myDog = new Dog()
;
jvm分配堆空间给对象
3、连接对象在和引用
Dog myDog =
new Dog();
即设置遥控器控制的对象
对象与引用的“恩恩怨怨”
引用在相互赋值,过程中,其实是对对象“控制权”的转让,没有人要的对象,就会被jvm检测到并清除。
有如下例:
1.
Book b = new Book();
Book c = new Book();
首先有这样两组对象与引用一一对应:
2.
Book d = c;
新建一个Book引用变量d,并将c赋值给d,其结果为:c和d引用同一对象:
3.
c = b;
将b的值赋值给c,其结果为:b和c引用同一对象
4.
d = null;
将null赋值给d,表示它不引用任何事物;
而对象2由于没有人可以引用它,只能被当作垃圾回收:
总结
这次看书基本明白了java引用和对象的关系,但我还想知道java为什么要这样设计。很遗憾,书中并没有具体说明,我只能通过我微不足道的经验谈谈自己的理解。
为了节省资源
java基本值传递,即拷贝传递,而拷贝引用显然比拷贝对象更省资源。
就像你拜托朋友照看房子,肯定是把钥匙的备份交给朋友,而非把房子的备份交给朋友。
java 初识对象和对象引用的关系相关推荐
- Java中对象和类的关系
1.类可以用来创建对象 2.类是一种模板 3.对象是类的一个实例 4.就如同:int i :这里的 int 就相当于一个类,而变量 i 就相当于一个实例(是类 int 创建的一个实例)只是一个简单的类 ...
- java对象与对象引用变量
Java对象及其引用 先搞清楚什么是堆,什么是栈. Java开辟了两类存储区域,对比二者的特点 存储区域 存储内容 优点 缺点 回收 栈 基本类型的变量和对象的引用变量 存取速度比堆要快,仅次于寄存 ...
- Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系
Java面试题 20在面向对象编程里,经常使用is-a来说明对象之间的继承关系,下列对象中不具备继承关系的是?() A:手机与小米手机 B:企业家与雷军 C:编程语言与Java D:中国与北京 类之间 ...
- Java栈内存、堆内存、方法区对对象和引用的关系
问题:Java栈内存.堆内存.方法区对对象和引用的关系 答案: 1.单个对象 如图所示: (1)首先类加载器加载要运行的类,首先将main方法加载进方法区,并进栈内存,顺序执行代码,创建对象,将对象的 ...
- Java的对象关系映射
KeyAccess的 1.4版现已发布. KeyAccess是Java的对象关系映射(ORM)工具,旨在减少在域对象模型和基础数据库之间进行手动更新的需要. 它使用现有数据库作为生成域模型的起点,并且 ...
- 练习-Java类和对象之对象引用之模拟手机功能
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: 任务: 实现手机的基本功能. 手机具有属性:品牌(brand).型号(type).价格(price).操作系统(os)和内存( ...
- 浅析Java中对象的创建与对象的数据类型转换
这篇文章主要介绍了Java中对象的创建与对象的数据类型转换,是Java入门学习中的基础知识,需要的朋友可以参考下 Java:对象创建和初始化过程 1.Java中的数据类型 Java中有3个数据 ...
- java 实例对象拷贝,实例详解java对象拷贝
这篇文章主要介绍了java对象拷贝详解及实例的相关资料,需要的朋友可以参考下 java对象拷贝详解及实例 Java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的:@T ...
- Java中对象和引用的理解
2019独角兽企业重金招聘Python工程师标准>>> 偶然想起Java中对象和引用的基本概念,为了加深下对此的理解和认识,特地整理一下相关的知识点,通过具体实例从两者的概念和区别两 ...
最新文章
- linux joe复制一行,Linux joe命令
- 【BZOJ 2432】 [Noi2011]兔农 矩乘+数论
- 37. Sudoku Solver
- RTP之H264封包和解包
- 数据之路 - Python爬虫 - 数据存储
- C语言大神进来看看这个题目
- 要闻君说:facebook迎来“全球宕机”惊险时刻;吸引大牛!拼多多成立了技术委员会;胡晓明卸任庚接任,阿里云计算迎来法人变更...
- linux 工业 网络协议,简单了解Linux TCP/IP协议栈
- C语言:某班有N名同学,每个学生的信息包括学号、姓名、三门课的成绩,从键盘输入名学生的信息,打印出N名学生三门课的平均成绩,以及最高分学生的信息(包括学号,姓名,三门课的成绩,平均分)
- Java数值溢出问题以及简单的算法实例
- JSP-08-第三方控件的使用
- 2021年PMP考试模拟题1(含答案)
- 幼儿园调查过程怎么写_(完整版)幼儿园调查报告
- 连接中国移动彩信网关发送彩信
- 惠普服务器查询ilo信息,HP服务器在线配置ilo地址
- 苹果ipad基本使用方法,苹果ipad的使用方法
- 【区块链扩容】侧链技术 Plasma(Layer 2)
- 日文發音中的PTK法則
- mysql 索引加锁分析
- 30分钟完成pandas入门