数组的定义
-
数组是相同类型数据的有序集合
-
-
每一个数据称作一个数组元素,每个数组元素都可以通过一个下标来访问它们
数组的声明和创建
必须先声明数组变量,才能在程序中使用数组,声明语法:
int[] nums;//首选方法,用这个就行
int nums2[];//知道就好
创建语法:
nums = new int[10];//在这个数组里可以存放10个int类型的数字
先声明再创建,就是正常的数组产生方法。
这个数组里,每个数都有自己的下标,我们通过每个数的下标来访问,其中第一个数的下标为0,也就是说上面nums这个数组下标为0~9,共10个数。
给数组中元素赋值
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
这里我们只给三个数赋了值,其他没赋值的都是默认值,int类型默认值为0,String类型默认值为null
取值
通过下标取值:
System.out.println(nums[2]);
设计一个计算所有元素的和
这里用一个for循环来做
public static void main(String[] args) {
int[] nums = new int[10];//声明+创建数组
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
nums[3] = 4;
int sum = 0;
for (int i = 0; i < nums.length ; i++) {
sum+=nums[i];//sum = sum + nums[i] 累加计算总和
}
System.out.println(sum);
}
我们可以通过 数组名.length 这个指令来获取数组长度
上面这里把声明和创建放在一起,是常用的方法,拆开是便于学习,不要忘了写长度和[]。
内存分析
堆:存放new的对象的数组;可以被所有的线程共享,不会存放别的对象引用(当我们只声明数组时,数组会先在堆中产生,而栈里暂时没有)
栈:存放基本变量类型(会包含这个基本类型的具体数值);引用对象的变量(会存放这个引用在堆里面的具体地址)(只有在我们创建了数组,也就是给数组具体是长度后,栈内就产生了数组,或者称为数组占用了栈的内存)
方法区:可以被所有的线程共享;包含了所有的class和static变量
三种初始化
-
静态初始化:
int[] a = {1,2,3};
Man[] mans = {new Man(1,1),new Man(2,2)}这里就是直接创建和赋值,下面的是类里创建,还没学到
-
动态初始化,也就是上面最开始我们学习的声明和创建
-
数组的默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
四个基本特点
-
其长度是确定的。数组一旦被创建,它的大小不可以改变。
-
其中元素必须是相同类型的,不允许出现混合类型
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型
-
数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是保存在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组边界
下标的合法区间:[1,length-1],如果越界就会报错
ArrayIndexOutOfBoundsException:数组下标越界异常