2.4 数组的定义及使用一

更新时间:2023-04-27 14:47:23 阅读: 评论:0


2023年4月27日发(作者:产品设计方案)

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 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图