在Java中,数组必须先初始化,然后才可以使用。所谓的初始化,就是为数组中的数组元素分配内存空间,并为每个数组元素赋初始值。
Java的数组初始化有两种基本方式:动态初始化与静态初始化。我们在初始化数组时,不要静态初始化和动态初始化同时使用。也就是说,不要在进行数组初始化时,既指定数组的长度,又为每个数组元素分配初始值。接下来壹哥分别利用这两种方式,给大家讲解数组的创建和初始化。
动态初始化
动态初始化,是指程序员只指定数组长度,由系统为数组元素分配初始值。
1.1 基本语法
数组在进行动态初始化时有两种写法,大家可以根据自己的编程习惯进行选择,没有孰优孰劣。
●写法1: 数据类型[] 数组名 = new 数据类型[长度];
●写法2: 数据类型 数组名[] = new 数据类型[长度];
1.2 案例代码
public class Demo01 {
public static void main(String[] args) {
//数组的动态初始化
//写法1: new用于创建一个对象
int[] arr = new int[3];
//写法2
//int arr[] = new int[3];
//存储数据
arr[0] = 11;
arr[1] = 22;
arr[2] = 33;
//取数据,数组的下标从0开始
System.out.println("第一个元素为:"+arr[0]);
System.out.println("第二个元素为:"+arr[1]);
System.out.println("第三个元素为:"+arr[2]);
//获取数据的长度
System.out.println("数组长度="+arr.length);
//错误:数组下标越界
//System.out.println(arr[3]);
}
}
在上述代码中,new是Java中的关键字,用来创建对象,我们以后会详细学习。
其中new int[3];中的3,表示这个数组的初始长度是3,只能存放3个数据。我们在声明时在方括号中直接输入数组的长度,这种方式就叫做动态初始化。数组的长度一旦确定后,就不会再发生改变。内部的数据元素可以通过索引进行添加,arr[]数组中的数字就叫做索引。
另外大家还注意,在Java中数组的下标是从0开始的。所以在一个长度为3的数组中,最后一个元素的下标为2,则取值时的格式是arr[2],而不应该是arr[3]。否则会产生数组下标越界异常”ArrayIndexOutOfBoundsException:: Index 3 out of bounds for length 3“,如下图所示:
静态初始化
静态初始化,就是由程序员指定每个数组元素的初始值,由系统计算出数组的长度。
2.1 基本语法
数组在进行静态初始化时有三种写法,大家可以根据自己的编程习惯进行选择,同样没有孰优孰劣。简写的静态初始化,只能在一条语句完成,不能分割成两条语句。
●写法1:数据类型[] 数组名 = {数据1,数据2,...};
●写法2:数据类型 数组名[] = {数据1,数据2,...};
●写法3:数据类型[] 数组名 = new 数据类型[]{数据1,数据2,...};
2.2 案例代码
public class Demo02 {
public static void main(String[] args) {
//数组的静态初始化
//写法1
//引用类型的数组。声明数组后直接添加一个花括号{},并在花括号中添加数据,就是静态初始化
String[] names = {"张三","李四","王五","一一哥"};
//写法2:
//String names[] = {"张三","李四","王五","一一哥"};
//写法3:
//String names[] = new String[]{"张三","李四","王五","一一哥"};
// [Ljava.lang.String;@15db9742 内存地址
// System.out.println(names);
//操作数组
//存数据,新数据存入到原有的位置
names[0] = "yyg";
names[1] = "尼古拉斯";
//取数据
System.out.println("第二个元素:"+names[1]);
System.out.println("第四个元素:"+names[3]);
//获取数组的长度
System.out.println("数组的长度:"+names.length);
}
}
在上述代码中,在声明完数组后,直接添加一个花括号{},并在花括号中添加数据,这种方式就叫做静态初始化。
对于初始化问题,有这样的一个问题哈!大家可以看看:
java中为什么数组静态初始化可以省略new而动态初始化不行?
其实在Java中,数组的初始化有两种方式:静态初始化和动态初始化。
静态初始化是指在定义数组的同时为数组元素指定初始值,可以省略new操作符。例如:
int[] arr1 = {1, 2, 3};
动态初始化是指在定义数组后,通过new操作符为数组元素分配空间,并指定初始值。例如:
int[] arr2 = new int[3];
arr2[0] = 1;
arr2[1] = 2;
arr2[2] = 3;
数组静态初始化可以省略new操作符的原因是编译器可以根据初始化的元素数量自动确定数组的长度,并分配相应的内存空间。而动态初始化必须显式指定数组长度,因为编译器无法根据赋值语句推断数组的长度。
因此,对于动态初始化,必须先使用new操作符为数组分配内存空间,然后再为数组元素赋值。现在大家明白了吗?