网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 网络学院 >> 程序设计 >> Java编程 >> 文章正文
  java中数组的讨论:是不是类?            【字体:
java中数组的讨论:是不是类?
作者:佚名    文章来源:不详    点击数:    更新时间:2007-7-8    
 

看了一篇讨论数组的文章:<关于java数组的深度思考>.以下是我自己的一点看法。
正在装载数据……

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

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

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

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

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

PS:参考了“Java虚拟机(Chapter Five: The Java Virtual Machine) (网上看的,不知道什么书里的)

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




本文来源:http://blog.csdn.net/ky5566/archive/2007/06/15/1653743.aspx
站内文章搜索 高级搜索
文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
     用java实现web服务器
     用java快速开发linux gu…
     正则表达式分解siemens交…
     [portal参考手册]目录
     jsp中调用oracle存储过程…
  • JSP中JavaBean的生命周期

  • Java Swing实现俄罗斯方块

  • 快速、简便使用AJAX技术的三…

  • java异常处理机制的深入理解

  • [转]Java堆和栈的区别 经典总…

  • 关于java Applet

  • java 设计工厂模式

  • Core Java 之旅

  • 专访Java之父:Java未来的发…

  • 开发手记---JAVA数据库连接池

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    网络学院©2007 www.23book.net
    为您提供web编程,vb编程,vc编程,服务器架设管理,数据库设计等方面的知识 站长:David