目录
数组的作用:
储存同类型的一组数据,将同一类型得数据组织起来。
数组的定义:
数组是相同类型数据的集合,每个数据叫做元素,每个元素可以通过索引(下标)来访问(索引是从0开始的)。
数组的声明:
数据类型 数组名[]; 数据类型 []数组名;
int arr[];
int []arr;
数组的初始化:
数组的初始化我们分为:
(1)静态初始化
除了用new关键字来产生数组以外,还可以在声明数组同时为其分配空间和赋值。(例如下面代码)
(2)动态初始化
数组定义与为数组分配空间并赋值的操作分开。(例如以下代码)
public class Sz7 {
public static void main(String[] args) {
int arr[]=new int[12];
arr[1]=4;
arr[0]=5;
arr[2]=9;
//以上为动态初始化
int arr1[]={1,23,3,1,212,23};
int arr2[]=new int[]{1,2,3,21,2,1};
/*
上两行静态初始化,怎么去判别呢?我采取的方法为:动态初始化需要的动作更多(步骤多),
而静态初始化的动作较少。
*/
}
}
(3)默认初始化
所谓的默认初始化就是我们一开始对数组进行声明时,会对数组进行初始化。
而根据数组数据类型的不同我们默认初始化的值也是不同的。(相关规则如下)
byte short int long 的默认初始化值都是0
float和double的默认初始化值为 0.0
引用数据类型为:null
让我们通过一个案例来体会数组:
数组的正向遍历与逆向遍历:(我们通过代码来讲解什么是正向遍历与逆向遍历)
public class Sz7 {
public static void main(String[] args) {
int arr[]={1,23,2,1,22,3,25,2,32,3,5};
for (int i = 1; i <= arr.length ; i++) {
System.out.print(arr[i-1]+",");//此为正向遍历
}
System.out.println();
for (int i = arr.length; i >=1 ; i--) {
System.out.print(arr[i-1]+",");//此为逆向遍历
}
}
索引越界异常,当我们定义数组为4个长度时,索引为0,1,2,3;当我们想要输出arr【4】时明显超出了我们直接所给的长度,而因为超出长度而产生的报错我们称为索引越界异常。
数组的例题:
import java.util.Arrays;
import java.util.Scanner;
public class Sz6 {
public static void main(String[] args) {
//功能:给定一个数组,删除下标为2的元素。
//进阶:定义一个方法,任意输入一个数组,删除任意位置的元素,并返回删除后,删除位置上的元素,且输出删除后数组的正向遍历
int arr[]={1,2,34,12,43,434,21,23,12,2,1};
int x=Sz(arr,8);
System.out.println(x);
}
public static int Sz(int arr[], int num) {
for (int i = num; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
arr[arr.length - 1] = 0;
System.out.println(Arrays.toString(arr));
return arr[num];
}
}
补充:
数组类型可以为任意类型,可以是基本数据类型与引用数据类型;
数组的长度是确定的,当数组一旦被创建,他的大小将不能再改变;
数组的数据必须是同类型的,不可一是混合类型。
在有idea工具时,我推荐你使用debug来看看,数组的默认初始化以及代码运行的过程,这样会对数组有更深的理解。
注意事项:
(1):当我们在使用数组时,我们要注意避免索引越界。
(2):与变量的定义一样如果仅仅是声明而没有进行后续操作的话他反编译后,在反编译中相当于没有定义。
(3):索引是从“0”开始的。