1. 数组的定义与使用
1.1 数组基本概念
数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于引用数据类型,因此牵扯到内存分配,数组定义语法有如下两类:
- 数组动态初始化:
- 声明并开辟数组:
1.数据类型 [] 数组名称 = new 数据类型 [长度];
2.数据类型 数组名称 [] = new 数据类型 [长度]; - 分步进行数组空间开辟(实例化):
- 声明数组:1.数据类型 数组名称 [] = null;
2.数据类型 [] 数组名称 = null; - 开辟数组空间:数组名称 = new 数据类型 [长度];
- 声明数组:1.数据类型 数组名称 [] = null;
- 声明并开辟数组:
当数组开辟空间之后,就可以采用如下的方式进行操作:
- 数组的访问通过索引完成,即:“数组名称[索引]”,数组的索引由0开始。可使用的索引范围为0~数组长度-1。
- 当数组采用动态初始化开辟空间之后,该数组每个元素都是该数组对应数据类型的默认值。
- 如果此时数组访问的时候超过了数组的索引范围,则会产生“ArrayIndexOutOfBoundsException”。
- 数组本身是一个有序的集合操作,所以对于数组的内容操作往往采用循环的模式完成。数组是一个有限的集合,应使用for循环。
- 在Java中提供有一种动态取得数组长度的方法:数组名称.length。
范例:定义一个int型数组
代码
public class ArrayDemo {
public static void main (String args[]){
int a [] = new int [3]; // 开辟了一个长度为3数组空间
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
// System.out.println(a[3]);
// 超出索引范围,程序报错,数组越界异常:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
}
}/* 输出结果:
0
0
0 */
范例:循环输出数组内容
代码
public class ArrayDemo {
public static void main (String args[]){
int a [] = new int [3]; // 开辟了一个数组空间
a [0] = 10; // 第一个元素
a [1] = 20; // 第二个元素
a [2] = 30; // 第三个元素
System.out.println(a.length);
for (int i = 0 ; i < a.length ; i++){
System.out.println(a[i]); // 通过循环控制索引
}
}
} /* 输出结果:
3
10
20
30 */
范例:采用分步模式开辟数组空间
代码
public class ArrayDemo {
public static void main (String args[]){
int a [] = null;
a = new int [3]; // 开辟了一个数组空间
for (int i = 0 ; i < a.length ; i++){
System.out.print(a[i] + " ");
}
}
}// 输出结果:0 0 0
在数组使用之前一定要开辟空间(实例化),如果使用了没有开辟空间的数组,一定会出现“NullPointerException”异常信息。
1.2 数组引用传递
范例:观察一道程序
代码
public class ArrayDemo {
public static void main (String args[]){
int data [] = null;
data = new int [3]; // 开辟了一个数组空间
data [0] = 10; // 第一个元素
data [1] = 20; // 第二个元素
data [2] = 30; // 第三个元素
}
}
内存分析如下:
引用数据类型,就一定能发生引用传递,本质:同一块堆内存可以被不同的栈内存所指向。
范例:观察一道程序
代码
public class ArrayDemo {
public static void main (String args[]){
int data [] = new int [3]; // 开辟了一个数组空间
int temp [] = null; // 声明
data [0] = 10; // 第一个元素
data [1] = 20; // 第二个元素
data [2] = 30; // 第三个元素
// 如果要发生引用传递,不要出现[]
temp = data; // int temp [] = data;
temp [0] = 99;
for (int i = 0 ; i < data.length ; i++){
System.out.print(data[i] + " ");
}
}
} // 输出结果:99 20 30
内存分析如下:
1.3 数组静态初始化
之前定义数组的特点:数组首先开辟内存空间,而后在使用索引进行内容的设置,这属于数组动态初始化,如果希望数组在定义的时候可以同时设置内容,就可以采用静态初始化完成。
数组的静态初始化分为以下两种:
简化格式 | 完整格式(建议使用) |
---|---|
数据类型 数组名称 [] = {值,值,···,值}; | 数据类型 数组名称 [] = new 数据类型 [] {值,值,···,值}; |
范例:静态初始化数组
代码
public class ArrayDemo {
public static void main (String args[]){
int data [] = {
1,2,23,4,56,34,123,1234,346,54};
for (int i = 0 ; i < data.length ; i++){
System.out.print(data[i] + " ");
}
}
} // 输出结果:1 2 23 4 56 34 123 1234 346 54
范例:完整格式静态初始化数组并使用匿名对象
代码
public class ArrayDemo {
public static void main (String args[]){
System.out.print(