Java学习——Java语法基础03(数组)


文章目录

  • Java学习——Java语法基础03(数组)
  • 一、概述
  • 二、一维数组
  • (1). 数组声明
  • (2). 数组初始化
  • 1. 静态初始化
  • 2. 动态初始化
  • 数组的长度获取 及 注意事项
  • 三、多维数组
  • (1). 二维数组声明
  • (2). 二维数组的初始化
  • 1. 静态初始化
  • 2. 动态初始化
  • 四、不规则数组
  • 总结



一、概述

Java的数组 概述:
数组是相同数据类型的多个数据的容器。
这些元素按线性顺序排列。所谓线性顺序是指除第一个元素外,每一个元素都有唯一的前驱元素;除最后一个元素外,每一个元素都有唯一的后继元素。(“简单理解就是:一个跟一个顺序排列”)。

数组具有如下三个基本特性:

  1. 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
  2. 有序性:数组中的元素是有序的,通过下标访问。
  3. 不可变性:数组一旦初始化,则长度(数组中 元素的个数)不可变。

数组可以分为:一维数组和多维数组。

二、一维数组

当数组中每个元素都只带有一个下标时,这种数组就是“一维数组”。数组是引用数据类型,引用数据类型在使用之前需要做两件事情:声明和初始化。

(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分配数组内存空间后,数组中的元素内容是给的数组类型的默认值, 不同类型默认值是不同的。

java数组有push Java数组有序性_初始化

数组的长度获取 及 注意事项

数组名称.length
数组未赋值: 空指针异常
超出长度的下标操作: 数组越界异常
注意:数组的长度在创建时就固定了



三、多维数组

当数组中每个元素又可以带有多个下标时,这种数组就是 “多维数组” 。主要了解二维数组。

(1). 二维数组声明

三种形式的语法:

元素数据类型[][] 数组变量名; 
元素数据类型 数组变量名[][]; 
元素数据类型[] 数组变量名[];

例:

int[][] array1; 
int array1[][]; 
int[] array1[];

(2). 二维数组的初始化

二维数组的初始化也可以分为静态初始化和动态初 始化。

1. 静态初始化

二维数组静态初始化如一维数组般,仅是简单赋值。
例:

int intArray[][] = { { 1, 2, 3 }, { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } };

结构图

java数组有push Java数组有序性_java数组有push_02

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数组有push Java数组有序性_数据类型_03

四、不规则数组

由于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个元素

下标如:

java数组有push Java数组有序性_数据类型_04

不规则数组不常用,所以访问之类的问题暂不探究。

总结



开始接触数组的定义及使用,方便之后许多数据的存储与访问。