前面讨论过一维数组的概念,一维数组只有一个下标。
声明一维数组
在java语言中,声明一维数组的语法为:
类型说明符 数组名[];
其中类型说明符可以是Java语言中任何有效的数据类型,如int、float、char等。数组名是数组的名称,数组名的命名需符合变量命名规则。
例如:
int a[]; //定义了一个数组,名称为a,数组中的元素类型是int float score[]; //定义了一个数组,名称为float,数组中的元素类型是float
一维数组的初始化
声明了一个数组,只是得到了一个存放数组的地址变量,并没有为数组元素分配内存空间,因而不能直接使用,必须经过初始化,为数组分配内存空间才能使用。
数组的初始化有两种方法,一种是静态初始化,另一种是动态初始化。
1、静态初始化
在声明数组时,直接给数组的每个元素赋上一个初始值。静态初始化一般在数组元素比较少时使用。
静态初始化的语法为:
数组类型 数组名[]={值1, 值2,……, 值2};
例如:
int a[] = {26,67,89,106,210};
float score[] = {87.5,67.2,96.8,92.6,75.9};
char chArray[] = {‘a’,’m’,’o’,’p’,’q’};对于数组a,可以看出数组中有5个元素,分别是a[0]、a[1]、a[2]、a[3]、a[4]、a[5],即数组下标从0开始,这5个元素的数值依次为a[0]=26、a[1]=67、a[2]=89、a[3]=106、a[4]=210。其在内存中结构如下图所示:
a数组在内存中的存储结构
错误的初始化:
int a[];
a[] = {26,67,89,106,210};数组的初始化只能在声明中完成,不能声明完成后,再进行初始化。
2、动态初始化
有时,数组并不需要在声明时就赋初值,而是在使用时才进行赋值。另外,有些数组比较大,元素非常多,用静态初始化不方便,这样就需要使用动态初始化。数组的动态初始化使用new操作符。
动态初始化的方式有两种。
(1)先声明数组,再用new分配内存
例如:
int a[]; a = new int[4];
Java的new运算操作符,用来在内存中申请存储空间,并将申请到存储空间的首地址赋值给被申请的变量。语句a = new int[4]为数组a分配了4个元素,这4个元素分别是a[0]、a[1]、a[2]、a[3],它们的值都为0。
(2)在定义数组的同时用new分配内存
例如:
int a[] = new int[4]; int size = 100; //也可以用变量给出数组的大小 float score[] = new float[size];
一维数组元素的访问
使用数组的最基本操作是数组元素的访问,对数组的使用最终都通过对元素的使用而实现。数组的元素通过数组下标进行访问。前面已经讲过,在Java语言中,数组下标是从0开始的,所以包含n个元素的数组下标的范围是0到n-1。例如:前面定义的数组a,其下标范围为0到4。要访问a数组的元素,可通过a[0]、a[1]、a[2]、a[3]、a[4]访问a数组的各个元素,此时,方括号中的数字是数组的下标,表示访问数组的第几个元素。
在Java语言中,数组也是一种对象,对象将在后面的学习单元讲述。数组被初始化后就确定了它的长度,对于每个已经分配了存储空间的数组,Java用一个数据成员length来存储这个数组的长度值。
例如:
int a[] = {26,67,89,106,210};
int i;
for( i = 0; i < a.length; i++ )
{
System.out.printf("第 %d 数组元素的值为: %d;\n",a[i]);
}在遍历数组的for循环中,循环条件为a.length,a.length就是数组长度的值,在a数组中,a.length的值为5。
下面通过一个完整的示例,演示如何声明一个数组,并通过nextFloat方法为数组动态赋值。
案例1:创建一个一维数组,用来记录5件商品的单价。商品单价由用户输入,最后遍历数组输出商品的单价和5件商品的总价。
在eclipse下新建项目PbaseUnit12,创建包unit,在unit包下创建Java类ArraySample1。代码如下:
/**
* @Title: ArraySample1.java
* @Package unit
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package unit;
import java.util.Scanner;
/**
* @ClassName: ArraySample1
* @Description: 数组结构(一维数组)案例1
* @author 编程训练营
* @date
*
*/
public class ArraySample1 {
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
/**
* 声明并初始化存储商品价格的数组
* 该数组有5个元素,数据类型是float
*/
float price[] = new float[5];
// 声明存储商品总价的变量,并初始化为0.0
float total = 0.0f;
// count为循环次数
int count = 5;
// i为循环变量
int i;
Scanner sc = new Scanner(System.in);
// 循环接收用户输入的5个商品价格
for (i = 0; i < count; i++) {
System.out.printf("请输入 %d 个商品的价格: ", i + 1);
// 用户输入的第i件商品价格赋值给price数组的第i个元素
price[i] = sc.nextFloat();
total += price[i];
}
System.out.println("*****商品小计******");
// 循环输出商品的价格:
for (i = 0; i < count; i++) {
System.out.printf("第 %d 件商品价格为: %.2f;\n", i + 1, price[i]);
}
System.out.printf("商品价格合计为: %.2f", total);
}
}程序结构分析
程序功能主要是演示数组声明、初始化、动态赋值、输出数组元素的使用方法。
程序声明包含5个元素的数组price,用来存储用户输入的5件商品价格,并通过循环获取用户输入的商品价格,同时计算商品总价,商品总价存储到声明的变量total中。然后,循环输出每件商品的价格,最后输出商品总价。
程序执行结果如下图所示:

可以把一维数组看作超市商品货柜中一列存放同类商品的格子,商家如果要把商品放到格子中,需要提前向超市申请格子的使用权,超市同意使用后,商家才能把商品放到格子中,然后根据格子的编号存取商品。再回到编程中来,程序要使用一维数组,必须要向计算机操作系统申请数组的使用权以及使用空间大小,操作系统分配给数组存储空间后,程序方可使用。因此,数组在使用中必须先声明并初始化后才能使用,声明和初始化数组的目的是为其留出所需要的存储空间,用来存储数组元素。