句柄、引用、指针与对象

栏目: C · 发布时间: 6年前

内容简介:首先要分清是在什么地方讨论,在以前学C时,是这么区分:Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知

首先要分清是在什么地方讨论,在以前学C时,是这么区分:

  1. 指针是对象在内存中的地址;
  2. 引用是对象的别名,其实质就是功能受限但是安全性更高的指针;
  3. 句柄是指针的指针,句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样。

Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。

然后我们回到 JAVA 来解释这个问题:

Java中有3个数据类型:基本数据类型、引用类型和null类型。其中,引用类型包括类类型(含数组)、接口类型。为了区别引用类型的变量标识符和基本数据类型变量标识符,我们特别的(特意的)使用Handle来称呼引用类型的变量标识符。对象的引用是创建对象时的返回值!引用是new表达式的返回值。new A(); 这里真正创建了一个对象,但我们没有用句柄去持有(hold、拿着、保存)该引用。handle是变量,reference是一种变量值。

A a = new A() ;
  1. 句柄a——常见为A a;或A a=new A();前者没有被初始化,后者被手工初始化。(如果a是一个类的成员变量,会被默认初始化。)句柄不同于基本变量的关键,它是一种间接寻址方式。句柄声明常常称为对象声明(如果你感到可能引起混淆,不理睬对象声明的说法好啦)。
  2. 创建对象——new A();这才是真正的创建对象。对象一般通过new表达式来创建。
  3. 计算new表达式的值:计算new表达式的值的整个过程,在微观上完成了对象的创建和这个对象自己的成员变量的初始化,在宏观上得到new表达式的值,这个值称为新对象的引用;
  4. 引用:new A()的值。引用可以简单的看作对象占据内存空间的地址;通过对象的引用,就可以方便的与其他对象区别开来,引用就是对象独特的身份标识。
  5. 句柄的初始化:句柄 = 引用;即把引用赋值给句柄,如语句a=new A();完成句柄的初始化后,就可以用句柄遥控对象了。
  6. 对于语句A a=new A();是对象创建及对象初始化与句柄的初始化的合并。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创新者的窘境(全新修订版)

创新者的窘境(全新修订版)

克莱顿•克里斯坦森 / 胡建桥 / 中信出版社 / 2014-1-1 / 48.00元

全球商业领域中,许多企业曾叱咤风云,但面对市场变化及新技术的挑战,最终惨遭淘汰。究其原因,竟然是因为它们精于管理,信奉客户至上等传统商业观念。这就是所有企业如今都正面临的“创新者的窘境”。 在《创新者的窘境》中,管理大师克里斯坦森指出,一些看似很完美的商业动作——对主流客户所需、赢利能力最强的产品进行精准投资和技术研发——最终却很可能毁掉一家优秀的企业。他分析了计算机、汽车、钢铁等多个行业的......一起来看看 《创新者的窘境(全新修订版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具