博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中数组的讨论:是不是类?
阅读量:4190 次
发布时间:2019-05-26

本文共 1175 字,大约阅读时间需要 3 分钟。

2007年06月14日 15:24:00

看了一篇讨论数组的文章:.以下是我自己的一点看法。

首先,要区分类型和类。我们可以很肯定的说数组是一种类型,但是它绝不是类。类型是编译器相关的概念,其抽象性跟面向对象无关。类是面向对象中的一个概念。他们不再同一个级别。int,byte都是类型,都对应相对的Class,系统也提供了对应的装箱类。但是要注意的是,对于他们的底层实现和操作都是native的,跟面向对象无关,我们可以认为是"内置对象",他们是用c来实现的,反射和Proxy也是这样的。所以可以取到Class的是任何类型,而不是类,这个Class类的本身的操作也都是native的,从这个意义上Object类本身也不是一个纯面向对象意义的类。在这个方面,我们可以说:看起来数组不是一个类。

从另一个角度来说,即使在内置的功能上,jdk也没有准备让数组成为一个类,通常意义上类(非内部或final)是面向对象的实体,有封装,继承,多态的特性。数组不同于集合类,无法继承,这个是对他的类的身份怀疑的一个证据。(.net似乎想折中,提供了一个Array类作为所有数组的父类。但是还是有些别扭)。但是A是B的父类,但是A[]和B[]却不能正确的CastClass。所以,我们也觉得数组不是一个类。

但是更深入一层来说,在虚拟机中,数组和类的引用同样是一块内存堆的指针。处理方式和表现方式很像。

总结,在语法和实现方式上,数组不像一个类。在虚拟机规范和底层实现,数组是一个像类的对象。

-----------------------------------------------------------------------------------------

PS:参考了" (网上看的,不知道什么书里的)

3、数组的保存(Array Representation)

在Java 中,数组是一种完全意义上的对象,他和对象一样保存在堆中、有一个指向Class类实例的引用。所有同一维度和类型的数组拥有同样的Class,数组的长 度不做考虑。对应Class的名字表示为维度和类型。比如一个整型数据的Class为"[I",字节型三维数组Class名为"[[[B",两维对象数据 Class名为"[[Ljava.lang.Object"。
多维数组被表示为数组的数组,如下图:
数组必须在堆中保存数组的长度,数组的数据和一些对象数组类型数据的引用。通过一个数组引用的,虚拟机应该能够取得一个数组的长度,通过索引能够访问特定 的数据,能够调用Object定义的方法。Object是所有数据类的直接父类。更多信息参见第六章"类文件"。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1652376

你可能感兴趣的文章
信息经济学
查看>>
整合BDS 2006/C++Builder 2006 和Boost 1.33.x
查看>>
ECO/AJAX技术研讨会问卷整理
查看>>
ECOIII專欄,第3集
查看>>
ECO技術和高雄/台中ECO/AJAX技術研討會
查看>>
BDS 2006 Hotfix 4铪铪铪铪铪
查看>>
如何重覆使用ECO建立的企業邏輯模型
查看>>
焦油坑与激情
查看>>
项目开发经验谈(二)
查看>>
项目开发经验谈(一)
查看>>
浅谈项目感觉
查看>>
用积木搭出的埃菲尔铁塔
查看>>
IT项目经理是否需要技术能力
查看>>
饮水者才能自知冷暖
查看>>
产品和样品
查看>>
测试Windows Sockets协议
查看>>
页面性能测试-QTP篇
查看>>
alipay支付宝招聘
查看>>
如何避免遗漏bug
查看>>
oracle性能测试
查看>>