------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
Java 数组
数组是同一种类型数据的集合。其实数组就是一个容器。
Java语言中提供的数组是用来存储固定大小的同类型元素。
Java语言按数组的维数来分类,可以分为一维数组和多维数组。
1、一维数组
方式1(更能表明数组类型)
type[] 变量名 = new type[数组中元素的个数];
比如:
int[] a = new int[10];
数组名,也即引用a,指向数组元素的首地址。
方式2
type变量名[] = new type[数组中元素的个数];
如:
int a[] = new int[10];
方式3 定义时直接初始化
type[] 变量名 = new type[]{逗号分隔的初始化值};
其中红色部分可省略,所以又有两种:
int[] a = {1,2,3,4};
int[] a = new int[]{1,2,3,4};
其中int[] a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元素个数是由后面花括号的内容决定的。
实例
public class TestArray { public static void main(String[] args) { // 数组大小 int size = 10; // 定义数组 double[] myList = new double[size]; myList[0] = 5.6; myList[1] = 4.5; myList[2] = 3.3; myList[4] = 4.0; myList[5] = 34.33; myList[6] = 34.0; myList[7] = 45.45; myList[8] = 99.993; myList[9] = 11123; // 计算所有元素的总和 double total = 0; for (int i = 0; i < size; i++) { total += myList[i]; } System.out.println("总和为: " + total); } }
下面的图片描绘了数组myList。这里myList数组里有10个double元素,它的下标从0到9。
2、二维数组
二维数组是数组的数组。
二维数组基本的定义方式
1、数据类型[][] 数组名 = new 数据类型[m][n];
2、数据类型[][] 数组名 = new 数据类型[m][];
3、数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};
4、数据类型[][] 数组名 = {{...},{...},{...}};
public class ArrayTest3 { public static void main(String[] args) { int[][] i = new int[2][3]; System.out.println("Is i an Object? " + (i instanceof Object)); System.out.println("Is i[0] an int[]? " + (i[0] instanceof int[])); } }
变长的二维数组
二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的。
声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度的数组。但是注意,第一维
大小不能空缺(不能只指定列数不指定行数)。
public class ArrayTest4
{
public static void main(String[] args)
{
//二维变长数组
int[][] a = new int[3][];
a[0] = new int[2];
a[1] = new int[3];
a[2] = new int[1];
//Error: 不能空缺第一维大小
//int[][] b = new int[][3];
}
}
二维数组也可以在定义的时候初始化,使用花括号的嵌套完成,这时候不指定两个维数的大小,并且根据初始
化值的个数不同,可以生成不同长度的数组元素。
public class ArrayTest5
{
public static void main(String[] args)
{
int[][] c = new int[][]{{1, 2, 3},{4},{5, 6, 7, 8}};
for(int i = 0; i < c.length; ++i)
{
for(int j = 0; j < c[i].length; ++j)
{
System.out.print(c[i][j]+" ");
}
System.out.println();
}
}
}
内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片
区域都有特定的处理数据方式和内存管理方式。
栈内存
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值,实体中的变量都有默认初始化值,实体不在被使用,会在不确定的时间内被垃圾回收器
回收。
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。