对于数组的拷贝。其实jdk里面有一个方法,完全可以帮我们实现这个功能。
在java.lang.System这个类里面有一个静态方法。
public static void arrayCopy(Object src,int srcPos,Object dest,int destPos,int length)
//数组拷贝(原来的数组,刚开始的位置,需要拷贝的数组,刚开始的位置,要拷贝多长)
使用这个方法,会抛出三个异常。都是RuntimeException也就是可以抓,也可以不抓的。
IndexOutOfBoundsException;
ArrayStoreException;
NullPointerExcetpion;
这三个异常。
看看这个程序理解一下数组的拷贝。
class TestArrayCopy //测试数组拷贝的程序
{
public static void main(String[] args)//main方法
{
int a[] = {1,2,3,4,5,6,7,8,9};//int类型a的数组初始化 1 2 3 4 5 6 7 8 9
int b[] = new int[10];//定义一个int类型b的数组的初始化为 0 0 0 0 0 0 0 0 0 0
for (int i=0;i<a.length ;i++ )//for循环,循环a的数组,为了比较一下
{
System.out.print(a[i]+” “);
}
System.out.println(“\n”+”下面就是a拷贝b之后的结果”);
System.arraycopy(a,0,b,1,a.length);
//调用System.arraycopy方法将a数组的第零个位置,拷贝到b数组从第一个位置开始,拷贝a数组的长度。
for (int i=0;i<b.length ;i++ )//循环拷贝之后的数组,因为是从下标第一个位置开始。
{
System.out.print(b[i]+” “);//打印
}
System.out.println(“\n”+”下面是二维数组的拷贝”);
int c[][] = {{9,8},{6,5,4},{3,2}};//二维数组
int d[][] = new int[3][];//要拷贝到这个二维数组里面
for (int i=0;i<c.length;i++ )//首先打印出没有拷贝之前c数组的数据。
{
for (int j=0;j<c[i].length;j++ )
{
System.out.print(c[i][j]+”,”);
}
System.out.println();
}
System.out.println(“下面的就是c拷贝d过之后的结果”);
System.arraycopy(c,0,d,0,c.length);//调用拷贝数组的方法。
d[0][0] = 200;//让后将d[0][0]改变成200,也就是数组里面的第一个位置。
for (int i=0;i<c.length;i++ )//这个是拷贝之后的结果。
{
for (int j=0;j<c[i].length;j++ )
{
System.out.print(d[i][j]+”,”);
}
System.out.println();
}
}
}
这个就是数组直接的拷贝,其实每一个程序多看看就很好理解的
。
转载于:https://blog.51cto.com/ksw1399/1174088