Array

array类提供静态方法动态创建和访问数组。

Array允许在get/set期间发生扩展转换,但是如果是收缩转换则会抛出一个IllegalArgumentException

创建一个无法实例化的方法

该类不可被继承,构造器私有化

public final class Array{
    private Array(){}
}

实例化一个指定长度的一维数组

使用指定的组件类型和长度创建一个新数组。

调用此方法等价于下面这样创建一个数组:

int[] x = {length};
Array.newInstance(componentType, x);

新数组的维度一定不能超过255

如果指定的componentType 为null, 则抛出NullPointerException

如果组件类型是Void.TYPE 或数组的维度超出了255, 则抛出了IllegalArgumentException

如果指定的长度是负数则抛出NegativeArraySizeException

public static Object newInstance(Class<?> componentType, int length)


实例化一个指定组件类型和维度的数组

创建一个新的具有指定组件类型和维度的新数组。

如果componentType代表一个非数组或接口,新数组具有dimensions.length的维度,componentType作为其组件,如果componentType表示一个数组类,新数组的维度等价于dimensions.length + componentType的维度。在这种情况下,新数组的类型是componentType的组件类型。

新数组的维度一定不能超过255

componentType 类对象表示新数组的组件类型

dimensions 表示新数组的维度

如果指定的componentType参数为null,则抛出NullPointerException

如果指定的dimensions参数是一个0维度的数组,如果componentType是Void.TYPE,或需要的维度超过255,则抛出IllegalArgumentException

如果指定的任何组件维度是负数则抛出NegativeArraySizeException

public static Object newInstance(Class<?> componentType, int... dimensions)


public static native int getLength(Object array) throws IllegalArgumentException
返回指定数组对象的长度, 以int的形式
如果array为null,则会抛出一个空指针异常

如果array不是数组对象,则会抛出一个IllegalArgumentException

get(Object array, int index);

set(Object array, int index, Object value);

NullPointerException 如果指定的array对象为null
IllegalArgumentException 如果指定的对象不是一个数组
ArrayIndexOutOfBoundsException 如果指定的索引参数是负数,或其超过了指数的数组的长度。


对源码的一些总结

八种基本类型的数组不是Object[].class的子类型

Object[].class.isAssignableFrom(int[].class);

但其八种基本包装类型,和其他对象的数组是Object[].class的子类型

Object[].class.isAssignableFrom(Integer[].class);
Object[].class.isAssignableFrom(List[].class);

List[][].class.isAssignableFrom(List[][][].class)); //返回false

因此在判断一个多维度的数组是最好用Object[],在JDK和Spring的源码里有体现到

results matching ""

    No results matching ""