a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 109|回复: 0

[基础知识] JAVA基础:System.arraycopy方法的使用

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
import java.util.Arrays; * t$ ]0 R: @9 e1 \! K/ ]) a
  /**5 W* {6 e, `; i
  * 年夜指定源数组中复制一个数组,复制年夜指定的位置起头,
1 g7 H4 G8 i9 s% u7 {  *到方针数组的指定位置竣事% I! ^7 q: K2 H
  */
2 S0 T" [0 y3 c/ V7 Q0 H& j3 e' ]  public class LessionSystemArraycopy {8 X7 w9 ~+ K# q% A$ x$ O6 x# G
  public static void main(String[] args) {
: v2 E; W/ u! [; ]; [' |; ^  // 此方位为native体例。! r- w- G) g2 }9 Y9 G
  // public static native void arraycopy(
- f. y: ^5 B" o* R/ S  // Object src, int srcPos, Object dest, // int destPos, int length);
! p: E8 D3 P8 Z8 I" L" f  //初始化! d- O3 @! T$ U
  int[] ids = { 1, 2, 3, 4, 5 }; System.out.println(Arrays.toString(ids)); // [1, 2, 3, 4, 5]
: n. e  X! r! P$ j" b7 U8 ]  //测试自我复制1 r- ]( w) _1 C$ l) S: P
  //把年夜索引0起头的2个数字复制到索引为3的位置上0 E- }2 a7 s+ f% p4 [
  System.arraycopy(ids, 0, ids, 3, 2); System.out.println(Arrays.toString(ids)); // [1, 2, 3, 1, 2]9 u2 }0 {2 [9 T
  //测试复制到此外数组上
& x+ e( J+ ]0 ]5 t+ ?6 o  //将数据的索引1起头的3个数据复制到方针的索引为0的位置上
% P: x$ Y+ U0 R& ?# v# {4 n( I  int[] ids2 = new int[6];
6 |  q7 y. x: Y  System.arraycopy(ids, 1, ids2, 0, 3); System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
! j, T  a! t* E" W2 J3 ]' D' a  //此功能要求1 U* A! x8 T# E
  //源的肇端位置+长度不能跨越末尾
' H0 n* s, J( C  //方针肇端位置+长度不能跨越末尾4 Q% U. D9 S+ R8 b: y; H* P
  //且所有的参数不能为负数2 i% E: N; S) ^1 W
  try {7 v1 H* A9 q( p) y6 i9 a& P
  System.arraycopy(ids, 0, ids2, 0, ids.length + 1);' z% \0 n" t+ b) g
  } catch (IndexOutOfBoundsException ex) {
  {% M( Y& \, k& S) }5 j  // 发生越界异常,数据不会改变System.out.println("拷贝发生异常:数据越界。");" I) l( F/ J# z2 W
  }
* ]1 S) I. |2 K) D& U' r  System.out.println(Arrays.toString(ids2)); // [2, 3, 1, 0, 0, 0]
7 L/ Y5 \: o, x4 C4 g  //如不美观是类型转换问题
6 q* A* b7 a0 z( }% s: \  Object[] o1 = { 1, 2, 3, 4.5, 6.7 };
+ [, M8 Z# F6 J2 S5 X/ A" t+ ^6 r) m  Integer[] o2 = new Integer[5];
+ g$ G6 k( G5 B# k* J5 W# p" N5 O  System.out.println(Arrays.toString(o2)); // [null, null, null, null, null]  {/ R. x5 e  T- R6 d+ [3 G
  try {/ g, S$ W/ j$ D6 l! ^) E4 j
  System.arraycopy(o1, 0, o2, 0, o1.length);* O, f7 U: y$ ~$ ?* S1 j
  } catch (ArrayStoreException ex) {! ]" J; v+ ~- n0 c: C
  // 发保留储转换,部门成功的数据会被复制曩昔
& R6 v7 i4 }! a( Z0 k  System.out.println("拷贝发生异常:数据转换错误,无法存储。");
# s0 S0 V* f- a7 L( d( R  }% b) ]* E3 O, D
  // 年夜结不美旁观,前面3个可以复制的数据已经被存储了。剩下的则没有0 W; s5 B2 S2 v
  System.out.println(Arrays.toString(o2)); // [1, 2, 3, null, null]
, t' ]! @2 d( q! g+ \6 E3 B6 p  }
9 |* ?8 G' h/ [* b+ X* C) _" p  }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-29 18:45 , Processed in 0.375294 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表