java--一维数组的定义与使用

什么是数组

在执行程序的过程中,经常要存储大量相同类型的数据。
如:要读入100个数,计算平均值,然后找出有多少个数大于平均值。
(1)程序读入这些数并计算它们的平均值
(2)将每个数与平均值进行比较判断它是否大于平均值。
为了完成任务,必须将全部数据存储到变量中。声明100个变量,重复写书100次几乎完全相同的代码,这个方式是不现实。
Java和其他编程语言一样提供了数组来存储这些数据。

数组是一组具有相同类型和名称的变变量的有序集合。
组成数组的这些变量称为数组的元素素,一个数组可以含有若干个元素。下标也叫索引(Index),用来指出某个元素在数组中的位置。
数组中第一个元素的下标默认为0,第二个元素的下标为1,依次类推。如果某一数组有n个元素,则其最大下标为n-1。

一维数组的定义与使用

一维数组的定义

引例:在线性代数中,具有10    个整数元素的行矩阵A的表示方法为A=[ao a¡ a2 a3 … a9]。为了存放行矩阵A的元素值,引入一维整型数组a[10],该数组组名为a,共有10元素,分别为a[0]、a[1]、a[2]、a[3]、a[4]、a[5]、a[6]、a[7]、a[8]、a[9]。
同其他数据类型一样,数组必须先定义后使用,下面逐一介绍一维数组的定义、初始化引用方法。

1.一维数组的声明

数据类型[]数组名;
或    数据类型数组名[];    

说明:
①“数据类型”定义了数组元素的数据类型,可!以是基本数据类型或引用数据类型。

②“数组名”定义数组变量的名字,应符合标识符的命名规则。

③ 声明数组时,不能在方括号中指定数组的元素素个数。
例如int[]a;或inta[];是正确的数组声明方式;    int[10]a是错误的数组声明方式。    
以上两种正确的数组声明方式均可声明一个数组 a,并且规定数组a中的元素类型均为整型。但在数组定义时并没有给出数组长度,系统没有为数组元素分配存储空间,此时若为数组元素赋值,

例如:

a[0]=1

编译器会给出局部变量未初始化的错误提示信息

所以,在数组声明后,需要创建数组,为数组分配存储空间。

2.一维数组的创建

可使用new关键字创建数组并分配存储空间,格式如下:
数组名=new数据类型[数组长度];

这时,系统会创建数组并为数组分配存储空间,且数组中的每个元素会被自动赋一个默认值,如整型为0,实型为0.0,布尔型为false,字符型为'\u0000'。如:

该语句为数组分配能容纳5个整型数据的内存容量,且数组中每个元素的初始值都为0。

上述例子是先声明数组变量,再用new关键字创建数组并分配内存,在实际操作中,数组的声明与创建也可以合二为一,用一条语句表示,格式为:
数据类型[]数组名 =new数据类型[数组长度]; 或  

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

例如:
 

除了使用new关键字创建数组外,还可以利用初始化方式声明数组变量并创建数组对象,其格式如下:

数据类型[]数组名=(值1,值2,.);

例如:

上述语句未使用new关键字,也未指定数组长度,由初始化元素的个数创建数组并确定数组长度。

一维数组的初始化及内存分配

1.一维数组的初始化

数组可以和基本数据类型一样,在定义的同时进行初始化操作。数组的初始化操作分为静态初始化和动态初始化两种形式。

(1)静态初始化
静态初始化是指在创建数组的同时给数组赋值。例如:

(2)动态初始化
动态初始化是指在创建数组后给数组元素赋值。例如:

2.一维数组内存分配

在Java语言中,基本数据类型变量的数据是直接保存在栈(stack)中的,引用数据类型变量在栈中保存了一个指针,而将实际数据保存在堆(heap)中,栈中的指针指向堆中的数据。当声明一个一维数组时,在栈中生成一个与该数组名相同的引用变量(指针)。例如

在栈中生成一个名为a的引用变量,这时还未生成任何实际的数组,所以堆中没有任何相应的信息(见图a)。然后用new关键字创建数组:

这时,new 关键字生成了一个数组,这个数组是在堆中的,共有3个元素(见图b)。引用变量的指针指向这个数组。直到这时,数组才是可以被访问的:

代码运行的结果是为数组赋值(见图c)。
一旦这个数组不再需要,Java就自动释放它所占用的内存。

3.一维数组的引用

为数组分配了空间以后,就可以访问数组中的每一个元素了,数组引用的格式为:数组名[数组下标]

其中,数组下标可以为整型常量或表达式,如a[2]、a[i]、a[i+1]等,它的值从0开始,例如前面定义的数组a:int[] a=new int[3];

数组下标从0到2,如果调用了a[3],程序会出现数组下标越界错误提示信息:
java.lang.ArrayIndexOutOfBoundsException

例1:某小组有10个学生,进行了数学考试,    求他们数学成绩的平均分、最高分和最    
低分。

运行结果:

例2:将一个数组的内容按颠倒的次序重新存放。例如数组中原数组元素的值依次为:
8、3、5、1、9、7、2,要求改为:2、7、9、1、5、3、8。

运行结果:

4.数组在内存中的存储

数组是引用类型


数组名变量在栈内存中,变量中存放的是数组元素的起始地址(引用)
数组元素存储在堆内存中

若数组没有初始化(实例化),系统没有给数组元素分配存储空间,数组名的初值为null

  • 34
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值