Java学习——Java语法基础03(数组)
文章目录
- Java学习——Java语法基础03(数组)
- 一、概述
- 二、一维数组
- (1). 数组声明
- (2). 数组初始化
- 1. 静态初始化
- 2. 动态初始化
- 数组的长度获取 及 注意事项
- 三、多维数组
- (1). 二维数组声明
- (2). 二维数组的初始化
- 1. 静态初始化
- 2. 动态初始化
- 四、不规则数组
- 总结
一、概述
Java的数组 概述:
数组是相同数据类型的多个数据的容器。
这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素。(“简单理解就是:一个跟一个顺序排列”)。
数组具有如下三个基本特性:
- 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
- 有序性:数组中的元素是有序的,通过下标访问。
- 不可变性:数组一旦初始化,则长度(数组中 元素的个数)不可变。
数组可以分为:一维数组和多维数组。
二、一维数组
当数组中每个元素都只带有一个下标时,这种数组就是“一维数组”。数组是引用数据类型,引用数据类型在使用之前需要做两件事情:声明和初始化。
(1). 数组声明
数组的声明就宣告这个数组中元素类型,数组的变量名。数组声明完成后,数组的长度还没有确 定,JVM还没有给元素分配内存空间。
声明语法
元素数据类型[] 数组变量名; (推荐)
元素数据类型 数组变量名[];
例:
int intArray[];
float[] floatArray;
String strArray[];
Date[] dateArray;
(2). 数组初始化
声明完成就要对数组进行初始化,数组初始化的过程就是为数组每一个元素分配内存空间,并为每一个元素提供初始值。初始化之后数组的长度就确定下来不能再变化了。
数组初始化可以分为静态初始化和动态初始化
1. 静态初始化
静态初始化就是将数组的元素放到大括号中, 元素之间用逗号 , 分隔。
例:
String[] strArray;
//静态初始化Stirng数组
strArray = {"abc","asda","1231","hello"};
//声明同时初始化数组
int intArray[] = {21,32,43,45};
静态初始化是在已知数组的每一个元素内容情况下使用的。很多情况下在编程时不知道元素有多少,更不知道元素的内容,此时可采用动态初始化。
2. 动态初始化
动态初始化使用new运算符分配指定长度的内存 空间
语法:
new 元素数据类型[数组长度] ;
//或是new运算符分配内存后直接赋值
数据类型[] 数组名称 = new 数据类型[]{内容 1,内容 2,内容 3...内容 n};
例:
//声明数组
int Array[];
// 动态初始化int数组 ,new 运算符分配内存
Array = new int[4];
//给数组第一个元素赋值
Array[0] = 21;
而new分配数组内存空间后,数组中的元素内容是给的数组类型的默认值, 不同类型默认值是不同的。
数组的长度获取 及 注意事项
数组名称.length
数组未赋值: 空指针异常
超出长度的下标操作: 数组越界异常
注意:数组的长度在创建时就固定了
三、多维数组
当数组中每个元素又可以带有多个下标时,这种数组就是 “多维数组” 。主要了解二维数组。
(1). 二维数组声明
三种形式的语法:
元素数据类型[][] 数组变量名;
元素数据类型 数组变量名[][];
元素数据类型[] 数组变量名[];
例:
int[][] array1;
int array1[][];
int[] array1[];
(2). 二维数组的初始化
二维数组的初始化也可以分为静态初始化和动态初 始化。
1. 静态初始化
二维数组静态初始化如一维数组般,仅是简单赋值。
例:
int intArray[][] = { { 1, 2, 3 }, { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } };
结构图
2. 动态初始化
语法:
new 元素数据类型[高维数组长度] [低维数组长度] ;
高维数组就是最外面的数组,低维数组是每一 个元素的数组。
定义:
int[][] intArray = new int[4][3];
例:
public static void main(String[] args) {
// 静态初始化二维数组
int[][] intArray = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 }, { 10, 11, 12 } };
// 动态初始化二维数组
float[][] floatArray = new float[4][3];
// 计算数组intArray元素的平方,结果保存到floatArray 的对应位置
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
// 计算平方
floatArray[i][j] = intArray[i][j] * intArray[i][j];
}
}
//先将intArray数组打印出来
System.out.println("输出 intArray 数组");
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
System.out.printf("[%d][%d] = %d", i, j, intArray[i][j]);
System.out.print('\t');
}
System.out.println();
}
// 打印数组floatArray
System.out.println("\n输出 floatArray 数组");
for (int i = 0; i < floatArray.length; i++) {
for (int j = 0; j < floatArray[i].length; j++) {
System.out.printf("[%d][%d] = %f", i, j, floatArray[i][j]);
System.out.print('\t');
}
System.out.println();
}
}
运行结果:
四、不规则数组
由于Java多维数组是数组的数组,因此会衍生出一种不规则数组,规则的4×3二维数组有12个元素, 而不规则数组就不一定了。如下代码静态初始化了 一个不规则数组。
例:
int intArray[][] = { { 1, 2 }, { 11 }, { 21, 22, 23 }, { 31, 32, 33 } };
而动态初始化不规则数组比较麻烦,不能使用 new int[4][3]语句,而是先初始化高维数组,然后再分别逐个初始化低维数组。
例:
int intArray[][] = new int[4][]; //先初始化高维数组为4
//逐一初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];
以上数组初始化后,并不是存在 3X4 个元素,而是9个元素
下标如:
不规则数组不常用,所以访问之类的问题暂不探究。
总结
开始接触数组的定义及使用,方便之后许多数据的存储与访问。