1、数组的定义
数组是指一组相关变量的集合。
其表示方法如下:
数据类型 数组名称[] = new 数据类型[长度];
数据类型 [] 数组名称 = new 数据类型[长度];
其分步完成过程如下:
声明数组 数据类型 数组名称 [] = null;
开辟数组 数组名称 = new 数据类型[长度];
由于数组是一种顺序结构,并且数组的长度都是固定的,那么可以使用循环的方式输出,很明显需要知道for循环,而且,java为了方便数组的输出,提供了一个“数组名称.length”属性,可以直接取得数组的长度。
接下来通过一段简单的代码演示,看看我们的数组究竟是什么样子的。
package com.yu.day02;
public class ArrayDemo {
public static void main(String[] args) {
int data[] = new int[3]; //数组动态初始化,内容为其数据类型默认值
data[0] = 11; //为数组设置内容
data[1] = 22; //为数组设置内容
data[2] = 21; //为数组设置内容
for (int i = 0; i < data.length; i++) { //根据数组长度循环输出
System.out.print(data[i] + "、"); //通过索引获取每一个数组内容
}
}
}
这个程序利用数组动态初始化开辟了3个长度的数组内容,并且为数组中的每一个元素进行初始化,由于数组的长度是固定的,所以使用了for循环实现了数组的访问下标控制实现了数组内容的输出。
接下来我们看看使用静态初始化定义数组
public class ArrayDemo {
public static void main(String[] args) {
int data[] = new int[] {11 , 23 , 26}; //使用数组的静态初始化
for (int x = 0; x < data.length; x++) { //for循环输出数组
System.out.print(data[x] + "、"); //根据索引获取数组内容
}
}
程序运行结果为如下图:
本程序采用的就是静态初始化,在数组定义是就为其设置了具体的数据内容,避免了先开辟后赋值的重复操作。
*注意:数组最大的方便之处在于可以使用线性的结构保存一组类型相同的变量,但是从另一个角度来讲,传统数组最大的缺陷在于其保存的数据合格数是固定的,正是因为这样,在许多项目开发中会大量地通过类集框架(java中提供的数据结构实现)实现动态数组的操作,但这并不意味着在项目中完全不适用数组,因为在一些数据的处理上还是要大量地采用数组。
2、数组引用传递分析
数组属于引用数据类型,在数组使用时需要通过关键字new开辟堆内存空间,一块堆内存空间可以同时被多个栈内存指向,进行引用数据操作。
接下来我们先看看简单的数组引用传递,代码演示如下:
public class ArrayDemo {
public static void main(String[] args) {
int data[] = new int[] {10 , 20 , 30}; //数组静态初始化
int temp[] = data; //引用传递
temp[0] = 15; //修改数组内容
for (int i = 0; i < temp.length; i++) { //循环输出数组数据
System.out.print(data[i] + "、"); //根据索引访问数组元素
}
}
}
运行输出结果如下:
在本程序中首先定义了一个int型数组,通过引用传递将数组内容传递给temp,并利用temp对数组data的修改。
*注意:不能够直接使用未开辟堆内存空间的数组。
3、foreach输出
数组是一个定义长的数据结构,在进行数组输出的时候往往会结合for循环并且利用下标的形式访问数组元素,为了简化数组与集合数据问题,提供有foreach结构(加强型for循环),其语法格式如下。
for(数据类型 变量:数组|集合) {
//循环体代码,循环次数为数组长度
}
接下来用代码演示一下foreach结构输出数组内容
public class ArrayDemo {
public static void main(String[] args) {
int data[] = new int[] {10 , 45 ,99}; //数组静态初始化
for(int temp : data) { //自动循环,将data数组每一个内容交给temp
System.out.print(temp + "、"); //数组每个元素会保存在temp变量中
}
}
}
我们通过foreach循环结果i偶,不仅可以简化for循环的定义结构,也可以避免数组下标访问由于处理不当所造成的数组越界异常(java.ArrayIndexOutOfBoundsException)。