055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念
本文知识点:数组的概念
数组的声明创建、初始化
在学习数组的声明创建、初始化前,我们可以和之前的变量的声明创建、初始化进行对比来学习。
那我们来看一下数组的声明,先来看一下语法格式。
数组的声明
数组声明语法格式1
数组声明格式1:
数据类型 [] 数组名;
变量声明格式:
数据类型 变量名;
数组声明相比变量声明,在数据类型后增加了一个中括号。而数组名的命名规则和变量名的命名规则是一致的。它本身是一个标识符,要满足标识符的命名规则。并且像变量名一样,如果数组名是由一个单词组成的,所有字母都是小写的。如果由多个单词组成的,第一个单词全部小写,从第二个单词开始,首字母全部大写。
数组声明语法格式2
数组声明格式2:
数据类型 数组名 [];
说明一下,为什么数组声明有这两种形式:
因为其他的编程语言,比如说C语言,C++,大家都是把中括号写在数组名的后面(即和我们学习的Java数组声明语法格式2相同)。Java为了和其他编程语言进行区分呢,Java就创建了自己的命名方式。就是把中括号写在数据类型的后面(数组声明语法格式1)。那么,第一种数组声明的语法格式才是我们在Java进行数组声明的时候,常用的形式。
案例练习如何声明数组——使用2种语法格式
声明一个整型数组如下:
int [] myIntArray ;
int myIntArray [];
以上两种声明方式都是正确的。
当然,如果你要生成其他类型的数组呢,就把相应的数据类型的名称进行改变即可。比如我们生成一个char类型的数组、生成字符串String类型的数组。
记住:字符串本身是一个类。这块内容后续我们学习面向对象的内容后,就知道了。借助类可以创建对象,所以String作为一个类,创建String类型的数组就是对象数组。
以上是数组的声明。
然后我们看下数组的创建。
数组的创建
数组创建形式1:
先声明、后创建
1、先去声明一个数组
2、再去创建数组
如何创建呢?数组创建形式1:
数组名 = new 数据类型[数组长度];
new是一个关键字,在后面的面向对象程序中呢,我们会遇到很多次new,new关键字其实是在创建一个对象。目前我们先知道有这个概念即可。对于数组问题,我们知道new是在创建数组即可。
例题:声明并创建一个长度为10的整型数组:
int [] arr;//声明数组
arr = new int[10];//创建数组
数组创建形式2:
声明数组的同时创建数组:
这个类似变量的初始化,但是数组中不叫初始化,稍后我们对初始化的内容进行演示。
数组创建形式2:
数据类型 [] 数组名 = new 数据类型[数组长度];
注意:
1、创建数组时,数组长度必须被指定,如果没有指定,是错误的。
2、声明时(赋值号=)左边的中括号写在数组名之前、数组名之后都是正确的。
数组在内存中的存储
我们前面学习变量的时候学习了:定义一个变量之后,变量就会在内存中存储。同样地,定义数组之后,也会在内存中分配内存空间,用来存储数组中的数据。而数组比较特别的一点是:数组在内存中分配的,肯定是一段连续的内存空间。
比如,我们定义一个整型的数组a:
int [] a = new int [5];
a是一个长度为5的整型数组,会在内存中开辟一块连续的内存空间。并且数组的默认值,对于整型数组来说,它的默认值都是0。所以我们知道,在这片连续的内存空间当中,每个数组元素的值都为0。就是说,长度为5的数组,它肯定有5个元素。那么这5个元素,它的每一个元素的元素值都是0。而我们的数组名本质是一个对象(数组是引用数据类型,即类类型,类创建的就是对象),它(数组名)是指向数组的第一个元素。这点在后面进行方法传值的时候是非常重要的。
这是数组的存储形式,需要注意的是:
数组的数组元素都有默认的元素值。后面我们会学习,其他数据类型创建的数组的数组元素的默认值都是什么!
这里,我们在强调一点,即局部变量。局部变量(在主方法中、在循环中我们学习的)都是没有默认值的。我们之前遇到过类似的问题,我们需要给局部变量进行赋值的。但是数组是有默认值的。因为数组的本质是对象。
数组的初始化
初始化的定义:声明的同时给变量赋值。
我们前面看到的new 数据类型[数组长度]; 不叫初始化,而叫做创建对象。
注意:
1、元素之间用逗号分隔(英文逗号)
2、整个代码书写都必须是在英文输入法状态之下的 否则,会报错。
上面的问题也是初学者经常会犯的错误。
那么数组长度是什么呢?数组长度:数组初始化时所给元素的个数,即为数组长度。
比如上面的例子中:
int [] arr = {1,2,3,4,5,6,7,8,9,10};
从1到10共计10个元素,那么数组长度就是10。
接下来,我们再看一下数组元素的引用。
数组元素的引用
前面提到过了,总说定义长度为10的数组,那么对于数组当中的每一个元素是如何进行表示的呢?
我们来看一下语法格式:
数组名[数组元素下标]
这里面,注意一下,数组元素下标是整型的数字,并且数组元素下标是从0开始的,其实整个“数组名[数组元素下标]“ 这样一个整体, 我们可以把这个整体看做是一个变量名。
我们看一下数组元素的引用的一个图例。
int [] a = {1,2,3,4,5,6,7,8,9,10};
10个元素对应10个连续的内存空间中。注意:数组一定是存放在连续的内存空间中。
我们把:
第1个元素表示为a[0], 注意,数组下标从0开始。
第2个元素表示为a[1],
第3个元素表示为a[2],
……
第10个元素表示为a[9],
这就类似变量和变量值之间的对应关系。比如,我们定义一个变量n:
int n = 10;
那么,n是变量名,10是变量值。同样的,a[0]表示数组a给1个位置处的数组元素起的名字,所以,我们说可以把a[0]这个整体看做一个变量名。而它所对应的值就是1。
数组元素引用的问题中,始终要记得:数组元素下标是从0开始。重要的事我已经说了三遍,不行你回顾文章数一数。
数组的长度
上面数组初始化的时候提过,数组长度就是数组元素的个数。
在数组中,还有一个属性 ,叫做length。length属性是表示数组长度的。如何使用属性呢?
使用格式:
数组名.length
使用方法类似我们前面从键盘接收数据时用到的sc.nextInt(); nextInt()有括号,而length属性没有括号。因为nextInt()是方法,需要括号。而length是属性,不需要括号。这些后面面向对象的知识会涉及到,现在有个了解就好了。(其实都是引用数据类型,对象引用属性或者对象饮用方法的形式)
Scanner sc = new Scanner(System.in);
sc.nextInt();