# 数组的基本概念及定义方法

当我们要通过Java写入或者定义10个学生的成绩时,用最简单的方法就是定义10个变量,对这10个变量依次进行操作


Q: “那不是太麻烦了嘛?”

A: “所以才有了数组嘛”


对的,数组就是服务于需要大量定义同类型数据的情况而使用的

例如上面的我需要定义10个学生的成绩,用数组的话就非常简单了

“那如何定义使用呢?”

数组分为动态定义静态定义,也叫动态初始化静态初始化

简单来讲就是动态初始化是你不需要知道数组里面的具体数值,只需要了解一共需要定义多少个数据即可

而静态初始化就是已经知道里面有什么数据,间接的告诉数组有多少个数据

可以简记为动态初始化指定长度静态初始化指定内容

接下来我们说下动态初始化的格式:

# 动态初始化

数据类型[] 数组名称 = new 数据类型[数组长度];

简单说下每段的含义

1.数据类型:你要定义的数组内的数据统一是什么类型的

2.左侧的[],代表是一个数组

3.new代表创建一个新数组并为此数组开辟一个内存空间

4.右侧的数据类型要和左侧的相同

5.[数组长度]:一共有多少个数据,个数是一个int类型的数字

写一段代码试一下:

public static void main(String[] args){
	//用定义一个有10个学生成绩的数组
	int[] numxs1 = new int[10]; 
}
1
2
3
4

这里的数据类型是int整型,创建了10个学生成绩的数组,但具体数据现不知道

# 静态初始化

说了动态初始化是指定个数,而静态初始化就是指定具体内容由计算机推算个数了

不多说还是上格式:

数据类型[] 数组名称=new 数据类型[] {}

发现没有?相对于动态初始化,静态初始化只在右侧[]后面多了一个大括号{}

剩下的全部和动态初始化一个东西

不过还是有一点点不同滴,细微差别

还是让我们定义一把试试:

public static void main(string[] args){
	//定义一个静态初始化的3名学生成绩,成绩分别是100,99,90
	int[] numxs2 = new int[] {100,99,90};
}
1
2
3
4

这差距虽然不明显,不过还是一眼能够察觉出来的吧

这里不再写右侧方括号[]里的个数了,而是转在大括号{}里写入具体数据并用逗号分隔,使计算机自动读取数据个数为3

静态初始化成功

# 访问初始化和为动态/静态初始化赋值

首先我们先来一段代码:

public static void main(String[] args){
	int[] num2 = new int[] {10,20,30};		//静态初始化
	
	//由于动态没赋值,我们首先访问静态里面的数据
	/*这里的第二个元素为20,因为数据是从0按照0,1,2...排序的,而我们自己数数是从1开始的,所以可以在你自	己数出的数上-1得到正确的数据编号*/
	System.out.println("num2里面的第二个元素是"+num2[1]);	//访问静态初始化
  	System.out.println(num2);		//类似于调用方法的格式
}
1
2
3
4
5
6
7
8

最终屏幕上打印的是:num2里面的第二个元素是:20

那根据我们之前说过的方法的打印调用,我们好像也能写成第7行代码的样子来调用

写上后虽然没报错,但是在上一句话地下输出了一串非常”诡异“的”乱码“ [I@736152👈类似于这种

这其实不是乱码,叫做”内存地址哈希值“

不过现在不需要了解这么深,知道名字就好


接下来我们要访问动态初始化并给其中一个数据赋值,也是接上一段代码...(只写动态嘻嘻(●'◡'●))

public static void main(String[] args){
	int[] num = new int[3];		//动态初始化
	//这是一个具有3个座位的数组,不过现子是空座位,所以统一都用0代替
	System.out.println(num[0]);
	System.out.println(num[1]);		//这3个位置都是0,这里先打印粗来
	System.out.println(num[2]);
	
	System.out.println("-------------分割线---------------");
	//接下来我们向里面赋值
	num[1]=20;		//向编号为1,第二个座位赋值20
	//再次打印
	System.out.println(num[0]);
	System.out.println(num[1]);		👈//这里num[1]的值变为了上面赋值的那个20
	System.out.println(num[2]);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

同样,静态初始话赋值也是如此,获取你想替换的数组的编号

int[] num2 = new int []{10,20,30}; //初始化

num2[1]=100; //替换(赋值)

既然上面动态初始化都赋值好了,不如我们直接拿来用

已知上面num数组里面为:0,20,0三数,我们拿出编号为1(也就是第二个20数据)来展示一下访问

嘿嘿其实还是一样的 : System.out.println(num[1]);

屏幕打印出来就是20,也就是我们num数组里编号为1的数据