1.常见概念:数组名、下标(或索引)、元素和数组的长度
图片说明
图片说明
2.数组的声明
图片说明
3.初始化
有静态和动态初始化两种情况:

public static void main(String[] args) {
//    动态初始化,数组的声明与赋值是分开的
//    声明数组
    int [] a;
    a = new int[5];
    for(int i = 0;i < a.length;i++) {
//        为数组赋值
        a[i] = i * i;
        System.out.println(a[i]);
    }

//    静态初始化 :在定义数组的同时就为数组元素分配空间并赋值。
//    声明数组
    int [] b = new int[] {1,2,3};
    for(int j = 0;j < b.length;j++) {
        System.out.println(b[j]);
    }

}

4.数组元素的默认初始化值
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。实例代码如下:

public static void main(String[] args) {
//    默认的初始化值
    int[] a = new int[3];
    String[] s = new String[3];
//    输出0
    System.out.println(a[1]);
//    输出null
    System.out.println(s[1]);
}    

图片说明
存储及初始化的情况如下:
图片说明
赋值之后就变成这样了:
图片说明
5.内存解析
图片说明
图片说明
6.实例
不同数组在内存中的情况:

public static void main(String[] args) {
//    声明了三个数组,a为初始数组,b是a的引用,两则的地址是一样的;c是新开辟的一块堆地址
    int[] a = {1,2,3};
    int[] b = a;
    int[] c = new int[3];
    for(int i = 0;i < a.length;i++ ) {
        c[i] = a[i];
    }
//    改变a[0]的值,则b[0]改变,但是c[0]不变
    a[0] = 0;
    for(int i = 0;i < a.length;i++ ) {
        System.out.println("a[0] = " + a[0]);
        System.out.println("b[0] = " + b[0]);
        System.out.println("c[0] = " + c[0]);
    }    
}

编译结果如下:
图片说明