Java数组的创建和使用(非常详细,附带实例)
一维数组(后续简称数组)是 Java 里最简单的数组结构,通常它也称为线性数组。
一个长度为 10 的数组可以存放 10 个指定类型的元素,数组中的每个元素都可以通过索引来访问,索引从 0 开始,即范围 0~9。
声明语法有两种,如下所示:
举个简单的例子:
与创建对象类似,创建数组也通过 new 关键字来实现,具体语法如下:
当然我们也可以像下面代码一样将声明数组与创建数组合并,这样更加方便:
创建数组后我们一般会对数组中的元素进行赋值,总体来说有三种数组赋值方式。前两种方式的语法分别如下:
第三种方式则是创建数组后再手动访问每一个元素进行赋值,语法如下,通过索引定位到元素然后再进行赋值。
下面的实例展示了数组的三种赋值方式:
一维数组里的元素都是按照索引顺序进行存储的,如果想获取其中的某个元素,则可以通过数组变量名加索引的形式来获取,具体为“数组变量名[索引]”。
例如,下面代码的输出结果为 java、python 和 rust:
例如,下面实例输出 10,表示该数组的长度为 10:
比如下面数组的长度为 6,则其索引范围为 0~5,如果我们执行“arr[6]”则会抛出数组越界的异常:
执行遍历操作必须使用循环语句,一般我们会用 for 循环语句,for 语句有两种遍历数组的写法,通过一个实例我们来看看这两种写法的不同:
第二种则不需要知道数组的长度,而通过“for(数据类型 变量名:数组变量名)”就能获取数组的每个元素。两种写法最终都依次输出 java、c++、python、nodejs、js 和 rust 六个字符串。
一个长度为 10 的数组可以存放 10 个指定类型的元素,数组中的每个元素都可以通过索引来访问,索引从 0 开始,即范围 0~9。
Java数组的声明与创建
由于数组是一种引用数据类型,因此它与类一样在使用前必须要先声明一个数组变量名。声明语法有两种,如下所示:
数据类型[] 数组变量名; 数据类型 数组变量名[];一种是在数据类型后面加中括号,另一种是在数组变量名后面加中括号,两种方式效果一样,可以根据个人偏好选择其一。
举个简单的例子:
int[] arr; int arr2[]; float[] arr3; char arr4[]; String[] arr5;我们声明的数组变量实际上是一个引用,声明后计算机内存空间中并未真正分配数组空间,所以如果我们想要用数组存放数据则还需要分配内存空间,即创建数组。
与创建对象类似,创建数组也通过 new 关键字来实现,具体语法如下:
数组变量名 = new 数据类型[数组长度];我们分别对前面声明的数组变量创建指定长度的数组,创建后就相当于给数组分配了指定大小的内存空间,而原来的数组变量则指向这块内存空间,代码如下:
arr = new int[20]; arr2 = new int[30]; arr3 = new float[15]; arr4 = new char[40]; arr5 = new String[10];
当然我们也可以像下面代码一样将声明数组与创建数组合并,这样更加方便:
int[] arr = new int[20]; int[] arr2 = new int[30]; float[] arr3 = new float[15]; char[] arr4 = new char[40]; String[] arr5 = new String[10];
Java数组的初始化与访问
实际上数组一旦被创建就已经被赋值初始化了,如果我们没有指定这些数组元素的值,则数组空间的每个元素都会有一个默认值,不同的数据类型有对应的默认值,如下表所示。数据类型 | byte | short | int | long | float | double | char | boolean | 引用类型 |
---|---|---|---|---|---|---|---|---|---|
默认值 | 0 | 0 | 0 | 0 | 0 | 0 | \000 | false | null |
创建数组后我们一般会对数组中的元素进行赋值,总体来说有三种数组赋值方式。前两种方式的语法分别如下:
数据类型[] 数组变量名 = new 数据类型[]{值1,值2,...,值n}; 数据类型[] 数组变量名 = {值1,值2,...,值n};主要通过一对大括号来按顺序指定数组中每个元素的值,大括号中的值用逗号进行分隔。
第三种方式则是创建数组后再手动访问每一个元素进行赋值,语法如下,通过索引定位到元素然后再进行赋值。
数组变量名[索引] = 值;
下面的实例展示了数组的三种赋值方式:
//第一种方式 String[] arr = new String[] { "java", "c++", "python", "nodejs", "js", "rust" }; //第二种方式 String[] arr2 = { "java", "c++", "python", "nodejs", "js", "rust" }; //第三种方式 String[] arr3 = new String[6]; arr3[0] = "java"; arr3[1] = "c++"; arr3[2] = "python"; arr3[3] = "nodejs"; arr3[4] = "js"; arr3[5] = "rust";它们的效果一样,都创建了一个长度为 6 的字符串数组,数组中的元素依次都为 java、c++、python、nodejs、js 和 rust。
一维数组里的元素都是按照索引顺序进行存储的,如果想获取其中的某个元素,则可以通过数组变量名加索引的形式来获取,具体为“数组变量名[索引]”。
例如,下面代码的输出结果为 java、python 和 rust:
public class OneDimentionArrayTest3 { public static void main(String[] args) { String[] arr = new String[] { "java", "c++", "python", "nodejs", "js", "rust" }; System.out.println(arr[0]); System.out.println(arr[2]); System.out.println(arr[5]); } }
Java数组的长度
每个数组都有长度(length)属性,如果要获取数组的长度则可以直接通过“数组变量名.length”来获得。例如,下面实例输出 10,表示该数组的长度为 10:
public class OneDimentionArrayTest4 { public static void main(String[] args) { int[] arr = { 2, 4, 5, 1, 4, 6, 9, 3, 4, 8 }; System.out.println(arr.length); } }我们经常会在获取数组元素时遇到程序抛出的“java.lang.ArrayIndexOutOfBoundsException”异常,这是因为在访问数组时索引超出了数组索引的范围,即从 0 到 n~1,n 为数组长度。
比如下面数组的长度为 6,则其索引范围为 0~5,如果我们执行“arr[6]”则会抛出数组越界的异常:
jshell> String[] arr = new String[] { "java", "c++", "python", "nodejs", "js", "rust" }; arr ==> String[6] { "java", "c++", "python", "nodejs", "js", "rust" } jshell> arr[6] | 异常错误 java.lang.ArrayIndexOutOfBoundsException:Index 6 out of bounds for length 6 | at (#13:1)
Java数组的遍历
所谓遍历数组就是逐一获取数组的每个元素。执行遍历操作必须使用循环语句,一般我们会用 for 循环语句,for 语句有两种遍历数组的写法,通过一个实例我们来看看这两种写法的不同:
public class OneDimentionArrayTest5 { public static void main(String[] args) { String[] arr = new String[] { "java", "c++", "python", "nodejs", "js", "rust" }; //第一种写法 for (int i = 0; i < arr.length; i++) System.out.println(arr[i]); //第二种写法 for (String s : arr) System.out.println(s); } }第一种很好理解,就是通过数组的长度来确定循环的范围,然后进行遍历操作。
第二种则不需要知道数组的长度,而通过“for(数据类型 变量名:数组变量名)”就能获取数组的每个元素。两种写法最终都依次输出 java、c++、python、nodejs、js 和 rust 六个字符串。