为什么需要数组
当变量过多时,使用普通的方法,太过于繁琐,不利于数据处理,这个时候就需要数组。
数组是相同类型的变量按顺序组成的一种复合数据类型,相同类型的变量称为数组元素,数组通过数组名和索引来使用数组元素
数组的基本要素标识符、数组元素、元素下标:从0开始、元素类型
注:数组长度固定不变,避免数组越界;数组中的所有元素必须属于相同的数据类型
如何使用数组声明数组(告诉计算机数据类型是什么)
分配空间(告诉计算机分配几个连续空间)
赋值(向分配的格子里放数据)
处理数据
步骤第一步:声明数组
数据类型[] 数组名;或者
数据类型 数组名[]
//声明8大基本类型的数据 byte[] nums1; short[] nums2; int[] nums3; long[] nums4; float[] nums5; double[] nums6; char[] chars; boolean[] bools; //声明String类型的数组 String strs[];
第二步:分配空间,告诉你声明的数组里可以存储多少个数据
数组名 = new 数据类型[数组元素个数]
nums1 = new byte[3]; nums2 = new short[5]; nums3 = new int[2]; nums4 = new long[8]; nums5 = new float[7]; nums6 = new double[6]; chars = new char[5]; bools = new boolean[3]; strs = new String[3];
第三步:给数组赋值,将数据存储到数组中
数组名[下标] = 数据;
nums3[1]=199; nums3[2]=123456; System.out.println(nums3[2]);
上面的代码,如果执行的话,就会出现异常
这个异常叫做数组下标越界异常,原因是在nums3这个数组只声明了数组里可以存储2个数据,而数组的下标是从0开始的,也就是说只有nums3[0]、nums3[1]两个。这里给nums[2]赋值时错误的,所以出现了数组下标越界异常。
第四步:操作数据,使用数组名[数组元素下标]来操作数据
System.out.println(nums3[0]); nums3[0]=1000; System.out.println(nums3[0]); nums3[0]+=500;//nums3[0]=nums3[0]+500; System.out.println(nums3[0]);
如果没有对数组里面的元素进行赋值,数组中是会有默认数据的
各数据类型的默认数据,我整了一张表
其中char类型的默认值比较奇怪,'u0000'是Unicode中的一个空格,不过我的电脑输出出来时一个空格
声明数组、分配空间合并写
数组类型[] 数组名 = new 数据类型[数组长度];
或者 数据类型 数组名[] = new 数组类型[数组长度];
she
//声明一个长度为5的int类型的数组 int[] nums1 = new int[5]; //声明一个长度为3的boolean类型的数组 boolean[] bools = new boolean[3]; //声明一个长度为6的boolean类型的数据 String[] strs = new String[6];
声明数组、分配空间、赋值合并写
数据类型[] 数组名 = new 数据类型[]{数据1,数据2,……,数据n}
数据类型 数组名[] = new 数据类型[]{数据1,数据2,……,数据n}
注意:等号后面的[]里不要写数组长度,写了会报错
声明数组、分配空间、赋值合并写的简写方式,也是最常用的方式
数据类型[] 数组名={数据1,数据2,……,数据n}
数据类型 数组名[]={数据1,数据2,……,数据n}
for循环的快捷键 在Myeclipse中可以先输入for在按alt+/
foreach可以直接输出增强for遍历的模板
获取数组中元素的个数:数组名.lengthint size = nums.length;
System.out.println("个数为:"+size);
for(int i=0;i遍历还可以使用增强for循环来进行遍历
for(数据类型 变量名:数组名){
System.oout.println(变量名)
}执行规律按照数组中元素的顺序依次将元素取出来存入到变量a中,这个时候操作变量a就相当于操作数组里面的元素
for(int a:nums){ System.out.print(a+" "); }数组与内存栈和堆都是内存,可以想象成内存中两块不一样的区域。
栈内存 大小固定 用于存储局部 临时变量(基本数据类型)和引用变量
堆内存 大小不固定 用于存储对象
变量x的值存的时栈中的一个地址(这个地址一般是16进制),地址里面再指向一块堆的存贮空间,数组的内存空间是一块连续的空间。比如:
int[] i={1,2,3,4,5};
可以想象成再这个空间里面有五个小格,第一个格子是1,第二个格子是2……。栈内存的地址有个指向,指向了这块堆内存的首地址。即可以通过栈内存中的地址找到首地址,而要找里面的元素就要使用到下标,就可以找到数据。
常见错误
public class ErrorDemo1 {
public static void main(String[ ] args){
int[ ] score = new int[ ];
score[0] = 89;
score[1] = 63;
System.out.println(score[0]);
}
}
错误是:编译错误,没有写明数组的大小
int[ ] scores = new int[2];
scores[0] = 90;
scores[1] = 85;
scores[2] = 65;
System.out.println(scores[2]);
错误是:编译出错,数组越界
int[ ] score = new int[5];
score = {60, 80, 90, 70, 85};
int[ ] score2;
score2 = {60, 80, 90, 70, 85};
错误是:创建数组并赋值的方式必须在一条语句中完成,且第一句[]中不能给定数组的长度



