数组
概念:数组是相同数据类型元素的集合;数组本身是引用数据类型,即对象
作用:数组可以存储基本数据类型,也可以存储引用数据类型
数组的声明
数据类型 [] 数组名字 例如:int [] i ;
数据类型 数组的名字 [] 例如:int i [] ;
注意: 在Java语言中两种声明方法没有任何区别,但是建议使用第一种,避免混淆a的数据类型
数组在声明后还只是一个空指针,不能使用,要想使用必须创建
数组的创建
int [] i1 = new int[10]; //声明数组时仅给定数组的长度内存,元素值都为默认的初始化值
int [] i2 = {1,2,3,4,5}; //声明数组并分配内存,同时将其初始化赋值
int [] i3 = new int[]{1,2,3,4,5}; //和上种方式相同,并且格式比较麻烦,建议舍弃使用
数组的长度:length属性
注意:数组的长度是属性,String的长度是length();
创建数组的时候必须指定数组的长度,而且一经定义则不允许改变
数组的长度虽然是x,但是在内存中实际给x+1个位置,另外一个存储x
数组的赋值
创建时赋值:int [] i = {1,2,3};
声明后赋值:int [] i = new int [10]; 根据数组的下标进行赋值 i[下标] = x;
数组直接的赋值
在C语言中,不可以将数组直接赋值给另一个数组;
在Java中,语法上允许这样做,但实际得到的效果是两个数组引用指向同一块内存。
int[] i1 = {2, 4, 6, 8, 10}; int[] i2; i2 = i1; //允许这样赋值

数组的访问
数组名字[索引] 例如:i [3];
注意: 数组的索引从0开始、索引的数据类型是整型、索引最大值和数组长度始终差1
数组的迭代
for循环:根据数组下标获取元素值array[x] 加上for循环根据数组长度array.length输出 例如:for(int i=0;i<array.length;i++){System.out.println(array[i]);}
增强for循环:for(数组元素类型 临时变量名;数组名) {Sys(变量名)} 例如:for(int i:array) {System.out.println(x);}
数组的拷贝
System类中,提供了一个数组拷贝的静态方法:
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
Object src(源数组名) int srcPos(指定拷贝位置) Object dest(拷贝数组名) int destPos(指定拷贝到具体的位置) int length(给定拷贝长度)
多维数组
概念:二位数组即数组的数组,即数组的元素也是数组
例如:int [] [] i = {{1},{1,2},{1,2,3}};
声明方式:int [] [] i1、int [] i2 []、int i3 [] [] 建议用第一种,不容易混淆数据类型
示例:int [][] i = new int [10][]; i[0] = {1,2,3}; i[1] = {4,5,6};
多维数组的迭代
第一种:for循环 详情见下面代码示例
第二章:增强for循环 详情见下面代码示例
值传递
概念:值传递的本质是赋值,是把实际参数赋值给形式参数的过程
基本数据类型是值之间进行赋值
引用数据类型虚拟地址之间进行赋值
代码示例
1 package summary2; 2 3 //数组 4 public class Array 5 { 6 void oneArray() 7 { 8 int [] i1 = new int[9]; //声明数组时仅给定数组的长度内存,元素值都为默认的初始化值 9 int [] i2 = {1,2,3,4,5}; //声明数组并分配内存,同时将其初始化赋值 10 int [] i3 = new int[]{1,2,3,4,5}; //和上种方式相同,并且格式比较麻烦,建议舍弃使用 11 int [] i4; //声明一个数组 12 13 System.out.println("首先打印数组i1"); 14 for(int m=0;m<9;m++) //用for循环给数组i1赋值并遍历 15 { 16 i1[m]=m; //通过下标赋值 17 System.out.print(i1[m]); //遍历 18 } 19 20 System.arraycopy(i1, 5, i2, 1, 2); //拷贝数组i1下标从5开始的值到i2下标1的位置,拷贝2个长度位 21 22 System.out.println("\n"+"换行打印数组i2"); 23 for(int i=0;i<i2.length;i++) //for循环遍历数组i2 24 { 25 System.out.print(i2[i]); 26 } 27 28 i4 = i3; //将数组i3的值赋给i4 29 i4[2]=9; //通过下标修改数组i4中的值 30 31 System.out.println("\n"+"换行打印数组i3"); 32 for(int i:i3) //增强for循环遍历数组i3 33 { 34 System.out.print(i); //输出发现尽管只修改了i4的值、但是i3的值也被改变 35 } 36 System.out.println("\n"+"换行打印数组i4"); 37 for(int i:i4) //增强for循环遍历数组i4 38 { 39 System.out.print(i); //因为i3和i4的值在同一个堆里存放 40 } 41 } 42 void twoArray() 43 { 44 //二维数组的声明方式 45 int [] [] i1; //二维数组的声明 46 int [] i2 []; //建议使用第一种 47 int i3 [] []; //不容易混淆数据类型 48 49 //二维数组的创建方式 50 //数据类型 [][] 数组名称 = {{123},{456}}; 51 //数据类型 [][] 数组名称 = new 数据类型 [长度][长度]; 52 53 int [][] array1 = {{1,2,3},{4,5,6}};//创建二维数组并赋值、创建二维数组必须给定行数 54 int [][] array2 = new int [2][3]; //创建一个两行三列的二维数组 55 array2[0][0] = 4; //给第一行第一个元素赋值 56 array2[0][1] = 5; //给第一行第二个元素赋值 57 array2[0][2] = 6; //给第一行第三个元素赋值 58 array2[1][0] = 7; //给第二行第一个元素赋值 59 array2[1][1] = 8; //给第二行第二个元素赋值 60 array2[1][2] = 9; //给第二行第三个元素赋值 61 62 //二维数组的迭代:for循环 63 System.out.println("\n"+"换行打印二维数组array1"); 64 for(int x = 0; x<array1.length; x++) //定位行 65 { 66 for(int y = 0; y<array1[x].length; y++) //定位行内的每个元素 67 { 68 System.out.print(array1[x][y]); //打印输出 69 } 70 } 71 72 //二维数组的迭代:增强for循环 73 System.out.println("\n"+"换行打印二维数组array2"); 74 for(int i[]:array2) //外循环遍历得到一维数组 75 { 76 for(int j:i) //内循环遍历得到数组元素 77 { 78 System.out.print(j); //打印输出 79 } 80 } 81 } 82 83 public static void main(String[] args) 84 { 85 Array ay = new Array(); 86 ay.oneArray(); 87 ay.twoArray(); 88 } 89 }
浙公网安备 33010602011771号