中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Groovy
2.6 对象引用
作者:佚名 时间:2007-12-11 18:14 出处:机械工业出版社 责编:月夜寒箫
              摘要:2.6 对象引用

2.6 对象引用

在赋值语句age=25中,使用Groovy的动态类型(dynamic typing)功能。age变量所引用值的类型是在其运行过程中,而不是在编译时确定的。动态类型通常会使程序变得更为简洁,这也是Groovy之所以简洁与灵活的的主要原因。执行此赋值语句时会创建一个Integer对象,并将25赋值给它,变量age的引用关系如图2-1所示。

图2-1 变量与对象引用

原文

 

译文

 

varible

 

变量

 

object

 

对象

 


变量与对象之间的关联关系被称为引用。变量引用了该对象所使用的内存部分。任何使用该变量的情况,如在表达式age+22中,将使用引用来获得与该对象相关的对象值。

请考虑下面的表达式:

def age = 25
def number = age

在groovy中,变量通常都和对象相关联。因此,第二个赋值语句的作用是,让number变量引用age变量所引用的同一个对象。图2-2是一个用来描述共享(或者别名)的范例。在这个范例中,两个变量均引用相同的对象。

图2-2 共享

原文

 

译文

 

varible

 

变量

 

object

 

对象

 

在后续的代码中,如果给age变量赋一个新值,其效果如图2-3所示。在这里,可以发现age变量现在引用了一个不同的对象,而number变量却仍然引用被age赋值首次创建的对象。

图2-3 重新赋值

原文

 

译文

 

varible

 

变量

 

object

 

对象

 


图2-4 内存垃圾

原文

 

译文

 

varible

 

变量

 

object

 

对象

 

最后,设想一下给number变量赋新值的效果。图2-4说明表示值25的那个对象现在不再被任何变量引用。因此,在后面的代码中将不能再次使用它。这是一个内存垃圾(garbage)范例,也就是一个没法被引用的对象。在Groovy中,垃圾收集器最终将收回这些对象所占用的内存空间,并将其内存空间分配给其他对象循环使用。

上述这些图说明说明了,在程序代码的任何地方,可以非常自由地给变量赋新值。更进一步来说,这些新值可以通过已经存在的值而拥有不同的数据类型。这既是Groovy的优点,同时也是它的弱点。举例来说,用户可以自由地将一个String值赋给前面引用Integer的变量,其危险在于:在程序代码中可能不会意识到此问题,并导致其他难以预测的后果。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有