数组声明:
数组变量类型[] 变量名 ; // int[] arr 或者 int arr[] 我们使用优先前者 后者是c语言的风格写法
数组 创建:
数组变量类型[] 变量名 = new 数组变量类型[];// int[] arr = new int[10]; 声明一个数组 并创建初始化长度为10的数组 new数组的时候一定要分配好数组的长度
数组使用的三种方式:
1.动态分配数组
int[] arr;//声明数组
arr = new int[10];//初始化数组
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
...
arr[9] = 10;
2.静态分配数组
int[] arr ={1,2,3,4,5};//声明 创建 初始化 一个长度为5的数组 ; {}可以取代 new int[]{1,2,3,4,5}; 静态分配的时候不用指定数组的长度 自己写了几个数就有几个长度
3.数组的默认初始化
int[] arr = new int[10];//默认初始化 由于数组类型是int, 数组里的每个元素的初始值 为0, 数组 是引用类型 , 数组里的元素相当于类里的实例变量, 所以数组一旦分配了内存长度, 其中的元素也按照实例变量同样的方式隐式初始化.
内存分析:
我们创建好一个数组.
int[] arr = new int[10];
//这个数组就在内存里有所分配
//内存 有 栈内存空间 堆内存空间 方法区域
//栈空间 存放 基本变量名 和 引用变量名
//堆空间 存放 对象 和 数组
//方法区 包含所有的static变量和class
/*
arr 就在 栈空间里头 , new int[10]就在堆空间里头.
arr就相当于一个引用, 它具体引用于 堆空间里头的new int[10]这一块空间地址
只有new 了一个数组, 内存里头才有一个真实的数组,声明一个数组仅仅是声明了一个数组的引用,只不过还没有真实的引用堆空间里的数组地址而已.
*/
小结:
1.数组是相同数据类型(可以设置任何类型的数组)
2数组变量是引用类型,数组也是对象,其中的元素都是对象的成员变量
3.数组长度是不可变的, 数组的长度 为 [0,length-1] ,一旦超出长度 就会报错: java.lang.ArrayIndexOutOfBoundsException 数组下标越界异常
4.数组元素必须是相同类型,不允许出现混合类型
5.数组中的元素可以任何数据类型, 包括基本类型 和 引用类型
6.数组本身就是对象,java中的对象是在堆空间里的,因此数组元素无论是基本类型还是其他对象类型,数组对象本身是在堆空间