1.6、数组

  1. 1.6、数组(重点)
    1. 1.6.1、基本概念
    2. 1.6.2、二维数组
    3. 1.6.3、数组的静态初始化

1.6、数组(重点

1.6.1、基本概念

例如:要定义100个整型变量,按照最原始的方式:i1、i2、…i100,这样做的话肯定不好管理,所以,这个时候就可以使用数组完成操作了,数组是一组相关的变量集合。

在java中,可以使用如下的语法格式定义一个数组:

整型类型 数组名称[] = new 数据类型[长度];
language-java复制代码

其中,也可以将以上的语法,变为一下的形式:

数据类型 []数组名称 = new 数据类型[长度];
language-java复制代码

只是,个人已经习惯于第一种写法,所以采用哪种方式由个人自行决定。

**范例:**定义一个整形数组

public class ArrayDemo01{
	public static void main(String args[]){
		int temp[] = new int[10] ;	// 表示声明了10个数组大小
	}
}
language-java复制代码

此时,数组已经生命完毕,那么下面就可以使用数组,使用的形式如下:

​ 通过“数组名称[下标]”的形式进行访问。

​ 在进行访问的时候,一定要注意的是,数组下标从0开始开始,10个大小的数组,下标:0~9

**范例:**访问数组中第一个、第三个元素

public class ArrayDemo01{
	public static void main(String args[]){
		int temp[] = new int[10] ;	// 表示声明了10个数组大小
		System.out.println("第一个元素:"+temp[0]) ;
		System.out.println("第三个元素:"+temp[2]) ;
		System.out.println("第三个元素:"+temp[10]) ;
	}
}
language-java复制代码

因为现在的都是整型数据,所以其默认的数值都是0,但是在进行数组操作的时候,一定要注意,数组的下标绝对不能超过数组的界限,如果超过规定的界限之后,将出现以下的错误:

​ ArrayIndexOutOfBoundsException

另外,在数组的操作中,为了方便起见,可以通过“数组.length”取得一个数组的长度。

public class ArrayDemo02{
	public static void main(String args[]){
		int temp[] = new int[10] ;	// 表示声明了10个数组大小
		System.out.println("数组长度:" + temp.length) ;
		for(int x=0;x<temp.length;x++){
			System.out.println("temp["+x+"] = " + temp[x]) ;
		}
	}
}
language-java复制代码

以上所进行的数组操作中,使用到了关键字“new”,所以在数组使用的时候已经为其开辟好了新的空间。

​ 数组的使用分为两个部分:

​ 声明数组,声明数组的时候一般都是栈内存中声明的

​ 为数组开辟空间,使用关键字new进行空间的开辟,在堆内存中声明

将以上的操作画成图形,如下所示:

所以,有时候,如果为了更好的观察清楚以上的图形,就可以将数组的使用分为两个步骤:

​ 1、 声明一个数组:数据类型 数组名称[] = null; //因为数组是引用数据类型,引用的默认值都是null。

​ 2、 开辟数组:数组名称 = new 数据类型[长度]; //使用关键字new完成

public class ArrayDemo03{
	public static void main(String args[]){
		int temp[] = null ;		// 声明一个数组,但是没有开辟空间
		temp = new int[10] ;	// 开辟了10个大小的空间
		System.out.println("数组长度:" + temp.length) ;
		for(int x=0;x<temp.length;x++){
			System.out.println("temp["+x+"] = " + temp[x]) ;
		}
	}
}
language-java复制代码

数组声明的时候,所有的内容都是默认值0,下面想可以声明一个3个元素的数组,之后为数组里面的每一个元素设置的内容都是奇数,并通过此程序,观察内存的分配操作。

public class ArrayDemo04{
	public static void main(String args[]){
		int x[] = null ;		// 声明数组
		x = new int[3] ;		// 开辟3个大小的空间
		for(int i=0;i<x.length;i++){
			x[i] = i * 2 + 1 ;	// 设置奇数
		}
		for(int i=0;i<x.length;i++){
			System.out.println("x["+i+"] = " + x[i]) ;
		}
	}
}
language-java复制代码

虽然,现在操作的是数组名称,但是实际上改变的都是堆内存中的内容。所以,这样的操作在java中就称为引用数据类型。

如果,现在假设把栈内存空间保存的内容当做一个人的名字,那么堆内存实际上就表示具体的的一个人。也就是说实际上在栈中存放的只是一个标记而已。

所以,此时可以为一个堆内存空同时设置多个栈的引用。

public class ArrayDemo05{
	public static void main(String args[]){
		int x[] = null ;		// 声明数组
		x = new int[3] ;		// 开辟3个大小的空间
		for(int i=0;i<x.length;i++){
			x[i] = i * 2 + 1 ;	// 设置奇数
		}
		int y[] = x ;			// 将x数组的空间给y数组
		y[2] = 300 ;
		for(int i=0;i<x.length;i++){
			System.out.println("x["+i+"] = " + x[i]) ;
		}
	}
}
language-java复制代码

之后,由数组y修改堆空间中的内容。

public class ArrayDemo05{
	public static void main(String args[]){
		int x[] = null ;		// 声明数组
		x = new int[3] ;		// 开辟3个大小的空间
		for(int i=0;i<x.length;i++){
			x[i] = i * 2 + 1 ;	// 设置奇数
		}
		int y[] = x ;			// 将x数组的空间给y数组
		y[2] = 300 ;
		for(int i=0;i<x.length;i++){
			System.out.println("x["+i+"] = " + x[i]) ;
		}
	}
}
language-java复制代码

输出的时候,发现,现在输出的是x,但是x[2]的内容已经改变了。因为x和y指向了同一个空间。那么这样的操作就表示引用数据类型的操作,也可以成为引用传递

1.6.2、二维数组

数组可以有多维数组,但是,从java现在的开发角度来看,数组也就使用到了二维了。就是在声明数组的时候使用“[]”。

**范例:**声明二维数组

public class ArrayDemo06{
	public static void main(String args[]){
		int x[][] = new int[3][3] ;	// 一共是9个元素
		for(int i=0;i<x.length;i++){
			for(int j=0;j<x[i].length;j++){
				System.out.println("x["+i+"]["+j+"] = " + x[i][j]) ;
			}
		}
	}
}
language-java复制代码

1.6.3、数组的静态初始化

之前使用数组的方式实际上都成为数组的动态初始化,因为里面的内容都是默认值,不是固定的,那么也可以使用如下的格式进行数组的静态初始化:

数据类型 数组名称[] = {值1,值2,值3,…}
language-java复制代码

转载请注明来源