1.数组的声明
2种基本的形式
ArrayType ArrayName[]
ArrayType[] ArrayName
2种声明方式没有区别,只是第2种可以同时声明多个数组,使用起来比较方便,如
int array[];
int[] array1,array2;
2.创建数组对象
上面语句只是对数组进行了声明,还没有分配内存,所以还不可以存放,也不能访问,需通过new创建数组对象
int array[];
array=new int[5];//注释后出错
// int array[]=new int[5];//上面2句也可以这样连着写
array[4]=5;
System.out.println(array[4]);
注意:数组的第一个元素的索引为0即上述例子中array[0],最后一个元素是array[4]不是array[5]
3.数组的初始化
int array[]=new int[5];
for(int i=0;i<array.length;i++)
array[i]=i+1;
//或者
//int array[]=new int[]{1,2,3,4,5};
//注意不能指定int[]数组长度否则出错
//或者
// int array[]={1,2,3,4,5};
//打印数组值,length属性顾名思义是数组长度
for(int j=0;j<array.length;j++)
System.out.println(array[j]);
创建数组对象后数组不必初始化也可以访问,那是因为创建数组对象时给出了相应类型的默认值
4.多维数组
下面是一个不错的例子(选自孙卫琴的Java面向对象编程14.5多维数组)
假定某个宾馆有三层楼,第一层4个房间,第二层3个房间,第三层5个房间住宿情况如图
String[][] rooms=new String[3][];
rooms[0]=new String[]{"Tom","Mike","Jack","null"};//第1层楼客人
rooms[1]=new String[]{"Marry","null","Linda"};//第2层楼客人
rooms[2]=new String[]{"null","Jane","null","null","Rose"};//第3层楼客人
//等价于
/* String[][] rooms={{"Tom","Mike","Jack","null"},
{"Marry","null","Linda"},
{"null","Jane","null","null","Rose"}
};*/
//打印各个房间客人信息
for(int i=0;i<rooms.length;i++)
for(int j=0;j<rooms[i].length;j++)
{
int roomNumber=(i+1)*100+j;//计算房间编号
System.out.println(roomNumber+"房间:"+rooms[i][j]);
}
5.数组的拷贝
(1)copyOf()方法
语法:copyOf(arr,int len);
参数说明:
arr:是要进行复制的数组
len:复制后新数组的长度
注意如果新数组的长度大于数组arr则用0填充,如果小于arr长度则从arr第一个元素截取至新数组长度为止
(2)copyOfRange()方法
语法:copyOfRange(arr,int fromIndex,int toIndex);
参数说明:
arr:是要进行复制的数组
fromIndex:开始复制数组的索引位置,必须在0与数组长度之间,新数组包括索引为fromIndex的元素
toIndex:复制范围的最后索引位置,可以大于arr长度,新数组不包括索引为toIndex的元素
/**打印数组*/
public static void arrayPrint(int array[])
{
for (int i : array)
System.out.print(i + " ");
System.out.println();
}
public static void main(String[] args)
{
int array1[] = { 1, 2, 3 };
int array2[] = { 4, 5, 6 };
System.out.println( "下面是array1拷贝array2的3种测试");
System.out.println( "拷贝前");
System.out.print( "array1=");
arrayPrint(array1);
System.out.print( "array2=");
arrayPrint(array2);
array1=array2;//直接赋值拷贝
//array1 = Arrays.copyOf(array2, 4);//使用copyOf
// array1 = Arrays.copyOfRange(array2, 1,5);//使用copyOfRange
System.out.println( "拷贝后");
System.out.print( "array1=");
arrayPrint(array1);
System.out.print( "array2=");
arrayPrint(array2);
array2[0]=8;//修改array2[0]值
System.out.println( "修改array2[0]=8后,array1[0]和array2[0]变化情况");
System.out.println( "array1[0]="+array1[0]);
System.out.println( "array2[0]="+array2[0]);
}
关于数组的拷贝初学者很容易用=号直接赋值拷贝,上例改变array2[0]值重新打印数组, 发现array1[0]值跟着改变了,那是因为直接赋值只会使数组array1指向array2数组。下面是拷贝的3种测试结果图,依次为直接赋值拷贝、使用copyOf、使用copyOfRange的截图
参考文献:
Java从入门到精通 高宏静
Java面向对象编程 孙卫琴