数组

数组声明:

数组变量类型[] 变量名 ; //  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中的对象是在堆空间里的,因此数组元素无论是基本类型还是其他对象类型,数组对象本身是在堆空间

原文地址:https://www.cnblogs.com/shenyueshuo/p/12922133.html