2017年计算机二级考试时间-2017年计算机二级考试java章节辅导:数组元素的复制

副标题:2017年计算机二级考试java章节辅导:数组元素的复制

时间:2023-11-25 01:53:01 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。


  5.1.7 数组元素的复制

  从前面的讲解中我们了解到,如果我们用一个已经初始化后的数组为另一个刚刚声明的数组做初始化,那么这两个数组实际上会指向同一个数组,对其中一个数组的操作会影响到另一个数组的值,在实际应该用中,经常会遇到只是想将数组的值赋值到另一个数组,被赋值的数组的修改对原数组不产生影响的情况。这时候我们就不能采用“int[]a=b”(b是一个已初始化的数组)了,可以通过如下的for循环完成:

  for(int i=0;i  b[i]=a[i];

  }

  在java中提供了一个现有的方法实现数组元素的复制,它就是“System.arraycopy”方法,该方法的原型为:

  public static void arraycopy(Object src,int srcPos,

  Object dest,int destPos, int length)

  各参数的意义:

  src - 源数组。

  srcPos - 源数组中的起始位置。

  dest - 目标数组。

  destPos - 目标数据中的起始位置。

  length - 要复制的数组元素的个数。

  方法的具体含义:

  从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。从 src 引用的源数组到 dest 引用的目标数组,数组的一个子序列被复制下来。源数组中位置在 srcPos 到 srcPos+length-1 之间的数组 元素被分别复制到目标数组中的 destPos 到 destPos+length-1 位置。

  如果参数 src 和 dest 引用相同的数组对象,则复制的执行过程就好像首先将 srcPos 到 srcPos+length-1 位置的元素复制到一个带有 length 个元素的临时数组,然后再将此临时数组的内容复制到目标数组的 destPos 到 destPos+length-1 位置一样。 不会造成读和写的冲突。

  在使用该方法时,需注意,如果参数的数据错误有可能会引起以下几种异常(有关异常的内容请参见第10章)。

  NullPointerException异常:这个异常的产生可能是因为源数组src或目标数组dest并没有引用到一个数组的实例,即数组没有初始化,这样数组的引用值为null,就会产生这个异常。如果这个是因为为null,则目标数组并不会去做任何的修。

  ArrayStoreException异常:这个异常的产生原因可能是来源或目标数组根本就不是数组,或者是来源目标数组不是基本类型的数组。Arraycopy只适用基本数据类型的数组。

  IndexOutOfBoundsException异常:这个异常的产生原因是索引值指定错误。包括srcPos、destPos和length值为负数,或者srcPos+length 大于 src.length,destPos+length 大于 dest.length。这些情况中的任何一种都会引发IndexOutOfBoundsException异常。

  例[5-8]

  public class Test5_8 {

  public static void main(String[] args) {

  int[] a={12,43,54,56,78};

  int[] b=new int[8];

  System.arraycopy(a, 1, b, 2, 4);

  for(int i=0;i  System.out.print(b[i]+"\t");

  }

  }

  }

  由上面关于arraycopy的解释我们知道System.arraycopy(a, 1, b, 2, 4),表示将数组a中下标为1开始的元素复制给数组b中下标为2开始的4个元素。

  运行结果为:

  0 0 43 54 56 78 0 0

  可能读者会有这样的疑问,既然我们自己通过for语句也可以控制两个数组的复制,那么为什么还需要使用arraycopy方法呢?

  原因有两个:系统给定的方法时经过严格测试的方法,一般不存在错误,且考虑了各种异常情况,比自己写的考虑全面;再有,arraycopy在内部实现上使用的是JNI的方法(即调用本地的其他语言所写的程序的方法),运行速度上会比我们用java写的程序要快。

2017年计算机二级考试java章节辅导:数组元素的复制.doc

本文来源:https://www.wddqw.com/LylO.html