Java数组
数组概述
数组是相同类型数据的有序集合(避免定义多个重复类型的变量)
例如:一个足球队,它们就是 通过编号区分每个队友
数据描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
每个数据则称为数组元素,每个数组元素通过一个下标来访问。
下标是从0开始的!打死都要记得!
数组声明与创建
“数组类型”:变量类型 变量的名字 = 变量的值
两种定义方式:
int[] nums;//Java是首选这个!
intnums[];//效果一样,但据说这是当年为了C/C++的人更好转到Java来
nums=newint[10];//这样就可以存放10个int类型的数字,即它的大小
声明与创建:
int[] nums;//1.声明一个数组
nums=newint[3];//2.创建一个数组
int[] nums=newint[3];//3.声明与创建一步到位,相当于“1.+2.”
//给数组元素赋值
nums[0] =1;
nums[1] =2;
System.out.println(nums[0]);//结果:1
System.out.println(nums[1]);//结果:2
/*我们一开始并没有给nums[2]赋值,
那输出的结果会是什么呢?*/
System.out.println(nums[2]);//结果:0,即可系统会默认一个0给我们。
结果如图所示:
计算数组所有元素的和、获取数组长度、遍历数组
//计算所有元素的和
intsum=0;
//获取数组长度:arrays.length
for(inti=0; i<nums.length;i++){
sum=sum+nums[i];
}
System.out.println("总和为:"+sum);
//遍历数组,获取它所有的元素;也可以像上面的一个一个输出数组的元素。
for(inti=0; i<nums.length;i++){
System.out.println("nums["+i+"]=:"+nums[i]);
}
数组的初始化
静态初始化
//声明+创建+赋值一步到位
int[] a= {1,2,3};
//1
System.out.println(a[0]);
动态初始化
先声明+创建,再赋值
int[] b=newint[3];
b[0] =1;
b[1] =2;
b[2] =3;
//1
System.out.println(b[0]);
默认初始化
首先,数组是引用类型;
8种基本类型也原地复习一下,我爱这样:byte、short、int、long、float、double、char、boolean;
所以它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化——说白了就是即使没给它赋值,它一开始就有默认的初始值;很正常,世界上很多东西都有它正式的说法,即使它就是那么回事。
图解:int类型与上述新建的nums数组类型
int 是一个一个的数据
nums 是一组数据,是一个整体
数组内存分析图
首先是要注意好每一步都有它们对应的变化!
再次提醒,在第二步时,就给予了默认初始值,也就是它会被默认初始化;
数组的四个特点
数组长度是确定的;一旦创建,大小不能改变;
数组元素打死都必须是相同类型;
数组中的元素可以是任何数据类型,即包括了基本类型和引用类型;
数组变量是引用类型;理解成对象,它的每个元素都相当于对象的变量成员;
数组本身就是对象——Java对象是在堆中,new关键字new出来的都是在堆中的;
所以,数组无论是用来保存原始类型还是其它新建对象类型,它一整个本身就是
在堆中。
数组边界
下标的合法区间范围:[0,length-1],一旦越界就会报错;
publicstaticvoidmain(String[] args){
int[] a=newint[3];
System.out.println(a[3]);//ArrayIndexOutOfBoundsException,你已经无了
}
如图所示你看见它ArrayIndexOutOfBoundsException(数组下标越界异常),就要考虑你取的下标是否在合法区间,上述代码合法区间就是:0~2。