2.4 数组的定七班班徽 义及使用一
本章目标
掌握数组的概念
掌握一维数组的声明及内存分配
掌握数组长度的取得
1. 什么是数组
数组是一组相关数据的集合,一个数组实际上就是一连串的变量,数组可以
分为一维数组、二维数组和多维数组。
数组的优点:
不使用数组定义100个整型变量:int i1;int i2;…int i100
使用数组定义:int i[100]
2. 一维数组的声明及内存分配
要使用Java的数组,必须经过声明数组和分配内存给数组两个步骤,这两
个步骤的语法结构如下:
【格式1 一维数组的声明与分配内存】
数据类型 数组名[ ] = null ;
数组名 风大的成语 = new 数据类型[长度] ;
对于数组的声明方式也可以用下面这种形式:
数据类型[ ] 数组名 = null ;
这两种语法本身没有任何的区别,在后面的讲解中我们将使用第一种方式,
此种数组因为数组名称之后只有一个“[ ]”,所以也称为一维数组。
数组的声明格式中,“数据类型”是声明数组元素的数据类型,常见的类型
有整型、浮点型与字符型等。“数组名”是用来统一这组相同数据类型的元素的
名称,建议大家以后使用有意义的名称为数组命名。数组声明后实际上是在栈内
存中保存了此数组的名称,接下来便要在堆内存中配置数组所需要的内存。其中,
“长度”是告诉编译器所声明的数组要存放多少个元素,而new则是命令编译
器根据括号里的长度在堆内存中开辟一块堆内存供该数组使用。下面是声明一维
数组并分配内存给该数组的一个范例:
int score[ ] = null ; //声明整型数组score
score = new int[3] ; //为整型数组score分配内存空间,其元素个数为3
在上例的第1行中,当声明一个整型数组score时,score可视为数组类型的
变量,此时,这个变量并没有包含内容,编译器仅会在栈内存中分配一块内存给
它,用来保存指向数组实体的地址的名称,如下图所示:
提问:数组声明的疑问。
在数组的声明上为什么要写上一个null呢?如“int score[ ] = null ;”。
回答:null表示引用数据类型的默认值。
在数据类型划分上曾经讲解过,数组属于引用数据类型,那么对于引用数据
类型来说,其默认值是null,表示暂时还没有任何指向的内存空间。在JDK1.5
之后可以不用给数据默认值,但是为了开发方便,建议大家采用赋给变量默认值
的方式。
声明之后,接着要做堆内存分配的操作,也就是上例中第2行语句。这一行
会开辟3个可供保存整数的内存空间,并把此内存空间的参考地址赋给score变
量。其内存分配的流程如下图所示。
从图中可以发现,一个数组开辟了堆内存之后,将在堆内存中保存数据,并
将堆内存的操作地址给了数最温暖的地方 组名称score。因为数组是引用数据类型,所以数组
变量score所保存的并非是数组的实体,而是数组堆内存的参考地址。
提示:堆栈内存的解释
数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间的
数组是永远无法使用的,必须有指向的堆内存才可以使用,要想开辟新的堆
内存则必须使用new关键字,然后只是将此堆内存的使用权交给了对应的栈
内存空间,而且一个堆内存空间可以同时被多个栈内存空间指向,即:一个
人可以有多个名字,人就相当于堆内存,名字就相当于栈内存,如下图所示。
除了用格式1的方法来声明并分配内存给数组外,也可以用较为简洁的方式
把两行缩成一行来编写,其格式如下:
【格式2 声明数组的同时分配内存】
数据类型 数组名[ ] = new 数据类型[个数]
上述的格式会在声明的同时分配一块内存空间供该数组使用。下面的范例是
声明整型数组score,并同时开辟可以保存10个整数的内存给score数组。
int score[ ] = new int[10] ;
// 声明一个元素为10的整型数组score,同时开辟一块内存空间供其使用
在Java中,由于整数数据类型所占用的空间为4个字节,而整型数组score
可保存的元素有10个,所以上例中占用的内存共有4*10=40个字节。下图是数
组score的保存方式。
3.数组中元素的表示方法
若要访问数组里的元素,可以利用索引来完成。Java的数组索引编号由0开
始,以一个score[10]的整型数组为例,score[0]代表第1个元素,score[1]代表第
2个元素,score[9]为数组中第10个元素(也就是最后一个元素)。下图为score
数组中元素的表示及排列方式。
范例:数组的声明及输出
public class ArrayDemo01{
public static void main(String args[]){
int score[] = null ; // 声明数组
score = new i日本民谣 nt[3] ; // 为数组开辟空间,大小为3
n("score[0] = " + score[0]) ;
n("score[1] = " + score[1]) ;
n("score[2] = " + score[2]) ;
for(int x=0;x<3;x++){
n("score["+x+"] = " + score[x]) ;
}
//n("score[3] = " + score[3]) ;
}
};
程序运行结果:
score[0] = 0
score[1] = 0
score[2] = 0
score[0] = 0
score[1] = 0
score[2] = 0
从程序中可以发现,对于数组的访问采用“数组名称[下标]”的方式,之前
一共开辟了3个空间大小的数组,所以下标的取值为0~2,假设程序中取出的内
容超过了这个下标,如score[3],则程序运行时会出现以下的错误提示:
ndexOutOfBoundsException: 3
提示的内容为数组索引超出绑定异常,这一点在使用数组中是经常出现的问
题,读者在编写程序时应该引起注意。此外,可以发现以上数组中的内容为0,
这是因为声明的是整型数组,而此时又没有为整型数组中的内容赋值,所以现在
都是默认值,整型的默认值为0。下面的范例将为数组中的元素进行赋值并进行
输出。
范例:为数组中的元素赋值并进行输出
public class ArrayDemo02{
public static void main(String args[]){
int score[] = null ; // 声明数组
score = new int[3] ; // 为数组开辟空间,大小为3
for(int x=0;x<3;x++){ // 为每一个元素赋值
score莫顿亨特 [x] = x * 2 + 1 ; // 每一个值都是奇数
}
for(int x=0;x<3;x++){
n("score["+x+"] = " + score[x]) ;
}
}
};
程序运行结果:
score[0] = 1
score[1] = 3
score[2] = 5
以上程序的作用是将奇数赋值给数组中的每个元素,程序的内存操作流程如
下图所示:
要特别注意的是:在Java中取得数组的长度(也就太阳的味道 是数组元素的个数)可
以利用“数组名称.length”的形式取得,如下面的格式:
【格式3 数组长度的取得】
数组名称.length 返回一个int型数据
范例:取得一个数组的长度
public class ArrayDemo03{
public static void main(String args[]){
int 冒号作用 score[] = null ; // 声明数组
score = new int[3] ; // 为数组开辟空间,大小为3
n("数组长度为:" + ) ;
}
};
程序运行结果:
数组长度为:3
本文发布于:2023-04-27 14:47:23,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/89/851077.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |