数组

  概念:数组是相同数据类型元素的集合;数组本身是引用数据类型,即对象

  作用:数组可以存储基本数据类型,也可以存储引用数据类型

  数组的声明

    数据类型 [] 数组名字 例如: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 }