class TestX { 
    public static void main(String[] args) { 
    /*  int []arr={1,2,3}; 
        int []arr1=new int [2];/这是一位数组定义的两种方法,静态的可以赋值,动态的不能再定义的时候赋值, 
/ 
        int[][]a={{1,2},{2,3,}}; 
        int [][]a1=new int[2][2]; 
        int [][]a2=new int [2][];//动态定义必须用new新建对象,静态的都不需要用new, 
        a2[0]=new int [2]; 
        a2[1]=new int[3]; 
*/ 这是二维数组定义的三种方式,其中只有静态方式可以全部赋值;动态的只能有初始化值; 
        System.out.println(arr[1]+ " "+arr1[0]+" "+a[1]+" "+a+" "+a[1][1]+" "+a1[1][1]+" "+a2[1][1]); 
    } 
}
B:数组概念
C:数组定义格式 
数据类型[] 数组名 = new 数据类型[数组的长度]; 
案例: 
class Demo1_Array { 
public static void main(String[] args) { 
    int x = 10; 
    x = 20; 
    System.out.println("x = " + x); 
    //数据类型[] 数组名 = new 数据类型[数组的长度]; 
    int[] arr = new int[5];             //可以存储五个int类型的数据 
    /* 
    左边: 
    int:数据类型 
    []:代表的数组,几个中括号就代表几维数组 
    arr:合法的标识符 
    右边: 
    new:创建新的实体或对象 
    int:数据类型 
    []:代表的数组 
    5:代表数组的长度 
    */
} 
}
D:案例演示
[I@19bb25a
[代表是数组,几个就代表几维 
I代表是int类型 
@是固定的 
19bb25a代表的是数组的地址值 
*/ 
class Demo2_Array { 
public static void main(String[] args) { 
    //数据类型[] 数组名 = new 数据类型[数组长度]; 
    int[] arr = new int[5];             //动态初始化,在内存中开辟连续的5块空间
System.out.println(arr[0]);         //系统给出默认初始化值,整数类型的都是0
arr[0] = 10;
System.out.println(arr[0]); 
System.out.println(arr);            //[I@19bb25a
} 
}
A:画图演示
一个数组 
案例: 
class Demo3_Array { 
public static void main(String[] args) { 
int[] arr = new int[3];                     //动态初始化,创建3块连续的空间 
System.out.println(arr); 
arr[0] = 10; 
arr[1] = 20;
System.out.println(arr[0]); 
System.out.println(arr[1]); 
} 
}
A:画图演示
二个不同的数组 
案例: 
class Demo4_Array { 
public static void main(String[] args) { 
int[] arr1 = new int[3];                //创建数组,长度为3 
int[] arr2 = new int[3];                //创建数组,长度为3
System.out.println(arr1);               //打印数组的地址值 
System.out.println(arr2);
arr1[0] = 10;                           //给第一个数组中第一个元素赋值 
arr2[1] = 20;                           //给第二个数组中第二个元素赋值
System.out.println(arr1[0]); 
System.out.println(arr1[1]); 
System.out.println(arr1[2]);
System.out.println("————————————–");
System.out.println(arr2[0]); 
System.out.println(arr2[1]); 
System.out.println(arr2[2]); 
} 
}
A:画图演示
三个引用,有两个数组的引用指向同一个地址 
案例: 
//三个引用两个数组 
class Demo5_Array { 
public static void main(String[] args) { 
int[] arr1 = new int[3]; 
int[] arr2 = new int[5]; 
int[] arr3 = arr2;
System.out.println(arr1); 
System.out.println(arr2); 
System.out.println(arr3);
arr1[0] = 10; 
arr1[1] = 20;
arr2[1] = 30; 
arr3[1] = 40; 
arr3[2] = 50;
System.out.println(arr1[0]); 
System.out.println(arr1[1]); 
System.out.println(arr1[2]); 
System.out.println("——————————-"); 
System.out.println(arr2[0]); 
System.out.println(arr2[1]); 
System.out.println(arr2[2]); 
System.out.println(arr2[3]); 
System.out.println(arr2[4]); 
System.out.println("——————————-"); 
System.out.println(arr3[0]); 
System.out.println(arr3[1]); 
System.out.println(arr3[2]); 
System.out.println(arr3[3]); 
System.out.println(arr3[4]); 
} 
} 
C:画图演示
一个数组 
案例: 
class Demo6_Array { 
public static void main(String[] args) { 
//数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…}; 
//int[] arr = new int[5]{11,22,33,44,55};   //这样是错的,不允许动静结合 
int[] arr2 = {11,22,33,44,55};          //静态初始化的简写形式
//int[] arr;                                //声明数组引用 
//arr = new int[]{11,22,33,44,55};
//int[] arr2; 
//arr2 = {11,22,33,44,55};              //简写形式声明和赋值在同一行,这样写会报错
System.out.println(arr2); 
System.out.println(arr2[4]); 
} 
} 
A:案例演示
b:NullPointerException:空指针异常
arr = null; 
System.out.println(arr[0]);                 //当数组引用赋值为null,再去调用数组中的元素就会出现空指针异常 
局部变量使用之前必须进行初始化 
} 
}    
A:案例演示
数组的最大索引:arr.length - 1; 
案例: 
class Demo8_Array { 
public static void main(String[] args) { 
int[] arr = {11,22,33,44,55};
/System.out.println(arr[0]);//这么做代码的复用性太差,我们学习了循环 
System.out.println(arr[1]); 
System.out.println(arr[2]); 
System.out.println(arr[3]); 
System.out.println(arr[4]);/
for (int i = 0;i < 5 ;i++ ) { 
    System.out.println(arr[i]); 
} 
System.out.println("—————"); 
//arr.length 代表的是数组的长度 
System.out.println(arr.length); 
for (int i = 0;i < arr.length ;i++ ) { 
    System.out.println(arr[i]); 
}
int[] arr2 = {3,4,5}; 
print(arr2); 
}
/* 
数组的遍历 
1,返回值类型void 
2,参数列表int[] arr 
*/
public static void print(int[] arr) { 
    for (int i = 0;i < arr.length ;i++ ) { 
        System.out.print(arr[i] + " "); 
    } 
} 
}
A:案例演示
/* 
获取数组中最大值 
1,返回值类型int 
2,参数列表int[] arr 
*/
public static int getMax(int[] arr) { 
    int max = arr[0]; 
    for (int i = 1;i < arr.length ;i++ ) {          //从数组的第二个元素开始遍历 
        if (max < arr[i]) {                         //如果max记录的值小于的数组中的元素 
            max = arr[i];                           //max记录住较大的 
        } 
    }
return max;
} 
}
A:案例演示
/* 
数组元素反转 
1,明确返回值类型void 
2,明确参数列表int[] arr 
*/
public static void reverseArray(int[] arr) { 
    for (int i = 0;i < arr.length / 2 ; i++) { 
        //arr[0]和arr[arr.length-1-0]交换 
        //arr[1]和arr[arr.length-1-1]交换 
        //arr[2]和arr[arr.lentth-1-2] 
        //…
    int temp = arr[i];
    arr[i] = arr[arr.length-1-i];
    arr[arr.length-1-i] = temp;
}
}
public static void reverseArray1(int[] arr) {
for(int i=0,j=arr.length-1;i<=j;i++,j--) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}
}
/* 
数组遍历 
1,明确返回值类型void 
2,明确参数列表int[] arr 
*/
public static void print(int[] arr) { 
    for (int i = 0;i < arr.length ;i++ ) {              //遍历数组中的每一个元素 
        System.out.print(arr[i] + " ");                 //打印在控制台 
    } 
} 
}
A:案例演示
数组查表法(根据键盘录入索引,查找对应星期) 
案例: 
import java.util.Scanner; 
class Demo11_Array { 
public static void main(String[] args) { 
Scanner sc = new Scanner(System.in); 
System.out.println("请输入对应的星期范围在1-7"); 
int week = sc.nextInt();
System.out.println("星期" + getWeek(week)); 
}
/* 
根据索引返回对应的星期 
1,返回值类型char 
2,参数列表int week 
*/
public static char getWeek(int week) { 
    char[] arr = {‘ ‘,‘一‘,‘二‘,‘三‘,‘四‘,‘五‘,‘六‘,‘日‘};     //定义了一张星期表 
    return arr[week];                                           //通过索引获取表中的元素 
} 
}
A:案例演示
/* 
查找元素索引 
1,返回值类型int 
2,明确参数列表,int[] arr,int value 
*/
public static int getIndex(int[] arr,int value) { 
    for (int i = 0;i < arr.length ;i++ ) {              //数组的遍历 
        if (arr[i] == value) {                          //如果数组中的元素与查找的元素匹配 
            return i; 
        }
}
return -1;
} 
}
D:注意事项
int x;
int y;
int x,y;
int[] x;
int[] y[];
int[] x,y[];    x是一维数组,y是二维数组
E:案例演示
定义二维数组,输出二维数组名称,一维数组名称,一个元素 
案例: 
class Demo1_Array { 
public static void main(String[] args) { 
int[][] arr = new int[3][2]; 
/* 
这是一个二维数组 
这个二维数组中有3个一维数组 
每个一维数组中有2个元素
[[I@19bb25a                                 //二维数组的地址值 
[I@da6bf4                                   //一维数组的地址值 
0                                           //元素值 
*/ 
System.out.println(arr);                    //二维数组 
System.out.println(arr[0]);                 //二维数组中的第一个一维数组 
System.out.println(arr[0][0]);              //二维数组中的第一个一维数组的第一个元素 
} 
}
A:画图演示
画图讲解上面的二维数组名称,一维数组名称,一个元素的值的问题 
class Demo2_Array { 
public static void main(String[] args) { 
int[][] arr = new int[3][2];
System.out.println(arr);                    //打印二维数组 
System.out.println(arr[0]);                 //打印二维数组中的第一个一维数组 
System.out.println(arr[0][0]);              //打印二维数组中的第一个一维数组中的第一个元素 
} 
} 
C:案例演示
讲解格式,输出数据,并画内存图 
案例: 
class Demo3_Array { 
public static void main(String[] args) { 
int[][] arr = new int[3][];             //这是一个二维数组,这个二维数组中有三个一维数组,三个一维数组都没有被赋值
System.out.println(arr[0]); 
System.out.println(arr[1]); 
System.out.println(arr[2]); 
arr[0] = new int[3];                //第一个一维数组中可以存储三个int值
 //   arr[1]= new int []{}//不可取
arr[1] = new int[5];                    //第二个一维数组中可以存储五个int值 
System.out.println("——————"); 
System.out.println(arr[0]); 
System.out.println(arr[1]); 
System.out.println(arr[2]); 
} 
} 
A:案例演示
需求:二维数组遍历
外循环控制的是二维数组的长度,其实就是一维数组的个数。
内循环控制的是一维数组的长度。 
案例: 
class Test1_Array { 
public static void main(String[] args) { 
int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
for (int i = 0;i < arr.length ;i++ ) {          //获取到每个二维数组中的一维数组 
    for (int j = 0;j < arr[i].length ;j++ ) {   //获取每个一维数组中的元素 
        System.out.print(arr[i][j] + " "); 
    }
System.out.println();
} 
} 
}
需求:公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
案例: 
class Test2_Array { 
public static void main(String[] args) { 
    int[][] arr = {{22,66,44},{77,33,88},{25,45,65},{11,66,99}};
int sum = 0;                                    //定义变量,记录每次相加的结果
for (int i = 0;i < arr.length ;i++ ) {          //获取每一个一维数组
    for (int j = 0;j < arr[i].length ;j++ ) {   //获取每一个一维数组中的元素
        sum = sum + arr[i][j];                  //累加
    }
}
System.out.println(sum);
} 
}
Java中到底是传值还是传址 
1,既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址 
2,java中只有传值,因为地址值也是值(出去面试都说这种,支持者是高司令(java之父)) 
/ 
class Test3_Array { 
    public static void main(String[] args) { 
        /int a = 10; 
        int b = 20; 
        System.out.println("a:"+a+",b:"+b);         //a = 10,b = 20 
        change(a,b); 
        System.out.println("a:"+a+",b:"+b);         //?*/
    int[] arr = {1,2,3,4,5};
    change(arr);
    System.out.println(arr[1]);
}
public static void change(int a,int b) {        //a = 10, b= 20
    System.out.println("a:"+a+",b:"+b);         //a = 10,b = 20
    a = b;                                      //a = 20
    b = a + b;                                  //b = 40
    System.out.println("a:"+a+",b:"+b);         //a = 20, b = 40
}
public static void change(int[] arr) {          //1,4,3,8,5
    for(int x=0; x<arr.length; x++) {
        if(arr[x]%2==0) {
            arr[x]*=2;
        }
    }
}
} 
 
原文:http://www.cnblogs.com/itlyh/p/6024662.html