为什么没有java.lang.Array类? 如果一个java数组是一个Object,不应该扩展Object吗?
这里是java包树: http : //docs.oracle.com/javase/7/docs/api/java/lang/package-tree.html
我读了一篇关于Java的教程,其中说Java数组是对象。
数组类在哪里? 我们可以如何创build这样的数组:
byte[] byteArr = new byte[]; char[] charArr = new char[]; int[] intArr = new int[];
数组将inheritanceObject的方法; 例如:
byte thisByte = 1; byte thatByte = 2; byte[] theseBytes = new byte[] {thisByte, thatByte}; int inheritance = theseBytes.length; //inherited 'length' field and some methods int wasntInWill = thatByte.length; //error
这里发生了什么?
编辑:
根据答案,我现在知道它是java.lang.reflect
包中的final
类。
我现在在我的Android项目中创build了一个java.lang.reflect
包,并在其中添加了一个名为Array.java的类。 为了证实这是原来的类的方式,Eclipse给了我错误“…已经存在的path/到/ android.jar”
如果我写出与java.lang.reflect.Array
相同的类,但更改toString()
方法…这应该在我的应用程序的权利?
从JLS :
每个数组都有一个关联的Class对象,与所有其他具有相同组件types的数组共享。 [this]的作用如下:数组types的直接超类是Object [和]每个数组types实现接口Cloneable和java.io.Serializable。
这由以下示例代码显示:
class Test { public static void main(String[] args) { int[] ia = new int[3]; System.out.println(ia.getClass()); System.out.println(ia.getClass().getSuperclass()); } }
打印:
class [I class java.lang.Object
其中string"[I"
是types为"array with component type int"
的类对象的运行时types签名"array with component type int"
。
是的,因为数组types有效地扩展了Object,所以你可以在arrayObject上调用toString()也可以看上面的例子
int arr[] = new arr[2]; arr.toString();
数组是一种语言function – 它们具有用于声明和访问的特定语法。 而他们的类定义对你来说是隐藏的。
它们在refleciton API中有一个表示 – java.lang.reflect.Array
顺便说一下, length
字段不是从Object
inheritance的。 .getClass()
等方法被inheritance。
对上述代码段进行细致的阐述:
public class ClassForName { public static void main(String[] argv) throws ClassNotFoundException { Class theClass = Class.forName("[I"); System.out.println(theClass.getName()); Class superClass = theClass.getSuperclass(); System.out.println(superClass.getName()); } }
结果:
C:\JavaTools>java ClassForName [I java.lang.Object
可以看出,“I”是我们要叫的类的名字,英文是“int的数组”。 这个类是一个“完全公民”的Java类,它响应了Object的所有方法。 唯一的区别是new
语法是不同的,它不支持Class的newInstance()
方法。
(在JVM中,类“[I”,“[C”等是“预定义的” – 没有与它们对应的.class文件,Java也将隐式地创build“ MyJavaClass;“类,如果你的程序中有一个”MyJavaClass“数组。
如果一个java数组是一个Object,不应该扩展
Object?
它确实扩展了java.lang.Object.