1

我们知道数组是 Java 中的对象。我相信要创建一个objectin Object oriented languages(如果没有,我们可以在单独的讨论中拥有它),我们需要它的蓝图(一个类)。但是我不确定或找不到在new operator使用时为数组创建对象的类。如果java中有一个数组类,那么层次结构会是什么样子?

如果没有类,那么对象是如何实例化的?没有类的对象类型背后的原因是什么?

4

5 回答 5

3

数组是由虚拟机使用名为newarray的特殊指令创建的,因此将它们视为一种特殊构造。

来自JVM 规范

3.9. 数组

Java 虚拟机数组也是对象。数组是使用一组不同的指令创建和操作的。newarray指令用于创建数值类型的数组。编码:

还可以从JLS中阅读更多关于数组的类层次结构的信息。

数组类型的直接超类是 Object。

于 2013-05-14T06:46:15.307 回答
2

一个数组,比如说 an Object[],是一种特殊的变量,就像原语一样。它的类型是Object[],不是Object。Java 不是像 Ruby 那样的“完全”面向对象的语言;它有一些特殊的数据类型,如数组和原语。

于 2013-05-14T06:45:07.240 回答
1

逻辑与你相反。

对象是类实例或数组。

但是由于 Java 是 OOP 语言,所以一切都必须表示为对象。当您反映您的代码时,您可以使用代表 Array 的类 java.lang.reflect.Array

于 2013-05-14T06:49:52.790 回答
1

数组在java中不是原始的。数组是一个容器对象,它包含固定数量的单一类型的值。

System.out.print(int[].class.toString());

它成功打印并证明它具有具体class的背景,并且同样适用于所有其他数组类型。

详细查找文档

于 2013-05-14T06:50:29.747 回答
1

是的,Java 有数组类,请参阅http://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html#jls-10.8数组类对象,例如

Class<int[]> cls = int[].class;

这些类是由 JVM 动态创建的。

原始类型数组之间没有层次结构

   int[] a = new long[1];

产生编译时错误。Object 数组类型的层次结构与 Object 类型相同

Object[] a = new String[1];
于 2013-05-14T06:50:53.033 回答