数组的基本概念:
如果说现在要求你定义100个整型变量,那么如果按照之前的做法,可能现在定义的的结构如下:
int i1, i2, i3, ... i100;
【数组】指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配。
数组动态初始化:
那么我们既然不想那么麻烦的一个个去定义变量,这就出现了数组动态初始化,可以动态分配数组的大小空间,有以下几种方式:
(1)【未开辟数组空间】数据类型 数组名称[] = null
(2)【未开辟数组空间】数据类型[] 数组名称 = null
(3)【开辟数组空间】 数据类型[] 数组名称 = new 数据类型[长度]
(4)【开辟数组空间】 数据类型 数组名称[] = new 数据类型[长度]
开辟了数组空间之后,就可以进行如下操作:
(1)通过索引访问元素,数组名称 [索引],索引范围就是0-数组的长度-1,若访问的索引超出这个范围,就会报java.lang.ArrayIndexOutOfBoundsException
这样的异常信息。
(2)在 java中提供有一种动态取得数组长度的方式:数组名称.length。
(3)通常使用for循环去访问数组这样的有序集合。
定义数组例子:
使用最基本的方法实现:
public class java_18 {
public static void main(String[] args) {
// 定义一个int型数组
int data[] = new int[2];//分配一个长度为2的数组
data[0] = 1;
data[1] = 2;
for (int i=0;i<data.length;i++){
System.out.println(data[i]);
}
}
}
分步实现(先声明后分配空间):
public class java_18 {
public static void main(String[] args) {
// 定义一个int型数组
int data[];//或者int data[] = null;
data = new int [2];
data[0] = 1;
data[1] = 2;
for (int i=0;i<data.length;i++){
System.out.println(data[i]);
}
}
}
注意:在数组使用之前一定要开辟空间(实例化),如果使用了没有开辟空间的数组,则一定会出现
NullPointerException
异常信息
数组引用传递(关于数组的复制):
定义一个空数组,将已定义的数组赋值给这个空数组,对这个新数组进行操作,原来的数组数据也会被改变。
public class java_18 {
public static void main(String[] args) {
// 定义一个int型数组
// int data[] = new int[2];//分配一个长度为2的数组
int data[];//或者int data[] = null;
int temp[] = null;
data = new int [2];
data[0] = 1;
data[1] = 2;
temp = data;
temp[0] = 10; //此时就发生了引用传递,data数组里面的值也被改变
for (int i=0;i<temp.length;i++){
System.out.println(data[i]);
System.out.println(temp[i]);
}
}
}
引用传递的本质是:同一块堆内存空间可以被不同的栈内存所指向。
数组静态初始化:
顾名思义就是希望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。
例如:
int arr[] = {1,2,3,4,5};
或者完整语法模式:
int arr1[] = new int[]{1,2,3,4,5};
二维数组(初略了解一下):
那么对二维数组的定义有两种声明形式:
(1)数组的动态初始化:数据类型 对象数组[][] = new 数据类型[行个数][列个数];
(2)数组的静态初始化:数据类型 对象数组[][] = new 数据类型[][]{ {值, 值,…}, {值, 值,…},…};
public class java_18 {
public static void main(String[] args) {
// 二维数组
// 法一 动态初始化
int data[][] = new int[2][2];
data[0][0] = 1;
data[0][1] = 2;
data[1][0] = 3;
data[1][1] = 4;
// 法二 静态初始化
int data1[][] = new int[][]{
{1,2},{3,4}
};
for (int i=0;i<data.length;i++){
for (int j=0;j<data[i].length;j++){
System.out.println(data[i][j]);
}
}
}
}
哎,还是js定义数组的方便,想怎么定义就怎么定义,数组大小和类型都非常自由,哈哈哈