讨论一下 Java 中的数组和 Array 类的关系如何?
Java 中的数组用起来很方便,但是我有一次想得到数组的长度,查了一下资料,说每个数组都有一个 length 属性,试验了没错。而在 SUN 的 J2SE API 中,没有找到任何关于数组的 length 属性的介绍。我理解为,Java 中的数组其实也是一个 Object 对象,但是在 J2SE API 中查 Object 类并没有 length 属性。我倒是找到了 java.lang.reflect.Array 这个反射类,它提供的用于数组的静态方法太多了,里面的 getLength() 正是用于返回数组长度的,以下是我的测试:
import java.lang.reflect.*;
public class ArrayTest
{
public static void main(String args[])
{
int i_l1 = args.length; // 直接用数组对象的 length 属性
int i_l2 = Array.getLength(args); // getLength() 是 Array 反射类的静态方法
System.out.println("args.length = " + i_l1);
System.out.println("Array.getLength(args) = " + i_l2);
}
}
命令行下输入:
javac ArrayTest
java ArrayTest aaa bbb ccc
返回结果证明两种方式都得到正确的数组长度。不知道大家是怎么理解数组对象的 length 属性的?它是从哪冒出来的?难道是通过某种内在方式和反射类 java.lang.reflect.Array 挂钩?如果说直接声明 Object obj[] 这样的数组对象,那么 obj 对象属于什么类型?这个类型有 length 属性,怎么去查证?我用 java.lang.reflect.Array 的静态方法获取数组长度或者别的处理都肯定没有问题。