数组:
一、定义:是一种有序的元素序列,是存储同一种数据类型多个元素的集合。也可以看成是一种容器。
二、格式:
格式一:数据类型 []数组名; int[] a;
格式二:数据类型 数组名[]; int a[];
三、初始化:
1、初始化就是在内存中为数组元素分配内存空间,并且为每个数组元素赋值。JAVA要求,数组只有先初始化了,才能使用。
2、分类:动态初始化:初始化时只给出长度,初始化值由系统给出
静态初始化:初始化时给出初始化值,由系统决定长度。
注意:两种方式,只能使用一种,不能进行动静结合。
3、格式:
动态初始化:数据类型[] 数组名 = new 数据类型[数组长度];(数组长度可以简单地理解为数组内存出元素的个数)
例如:int[] arr = new int[3];(定义了一个可以存放3个int类型的值)
静态初始化:数据类型[]数组名=new 数据类型[]{元素1,元素2....};
例如:int []arr=new int[]{1,2,3};
简化形式:数据类型[]数组名={元素1,元素2,.....};
例如:int[] arr = {1,2,3};
数组操作中常见的问题:越界和空指针
当显示ArrayIndexOutOfBoundsException:数组索引越界异常,产生这种异常的原因是放分了不存在的索引
当显示NullPointerException:表示空指针异常,造成这种异常的原因是数组已经不再只想对内存了,此时如果还用数组名去访问元素
二维数组
含义:二维数组是每一个元素为一维数组的数组。
格式:(1)数据类型[][] 变量名 = new 数据类型[m][n];
其中m表示此二维数组中一维数组的个数,n为每一个一维数组中含有多少元素。
a:数据类型 数组名[][] = new 数据类型[m][n];
b:数据类型[] 数组名[] = new 数据类型[m][n];
b:数据类型[] 数组名[] = new 数据类型[m][n];
也可以用来定义二维数组,但是不推荐使用。
例、int[][] arr = new int[3][2];定义了一个含有3个包含2个元素的一维数组的二维数组。
(2)数据类型[][] 变量名 = new 数据类型[m][];
m表示这个二维数组有多少个一维数组,没有直接给出一维数组的元素个数。可以之后动态的给出
m表示这个二维数组有多少个一维数组,没有直接给出一维数组的元素个数。可以之后动态的给出
例如
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
(3)数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}...};
简化版:数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
内存的分配:
栈:
局部变量存放在栈中局部变量:在方法定义中或者方法声明上的变量都是局部变量。(就是作用的范围在方法内部)
堆:
所有new 出来的东西都存放在堆中。
在堆中存储的特点:会为每一个new 出来的东西分配一个地址值,当时用完毕以后里面的东西就变成了垃圾,等待垃圾回收器的回收。
每个new出来的东西都有一个默认值。具体的数据类型和默认值如下。
byte,short,int ,long 默认为0
float,double 默认为0.0
char 默认为‘\u0000’
boolean 默认为 false
引用数据类型 默认为null
方法区:又叫静态区,跟堆一样,被所有线程所共享,方法区包含所有的class和static变量。
本地方法区:和系统相关
寄存器:CPU使用
关于存储部分更加详细的内容可以参考
http://www.open-open.com/lib/view/open1432200119489.html