Java数组的定义与使用
前言:
作为虚拟世界中的原始人的我,在上文中不仅会制造工具(数据类型与逻辑控制语句组合)了,还可以做出可以多次使用的工具(方法)。但是我应该怎样批量做出同种工具,哪就需要批量的对“物质”进行存储,就像现实世界中,收集好大量的煤炭,干柴一样,在这片虚拟世界中,我也可一收集大量的整形、浮点型进存储,处理,即用数组。倘若我进入工业时代,有该如何批量生产呢?
一、数组的基本使用
1.数组是什么?
- 具有相同数据类型的集合,即为数组,当要批量创建或者处理多个数据时,就可以把它们定义成一个数组。然后对这个数组进行操作。
2.创建数组
// 动态初始化:
数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };
// 静态初始化 :
数据类型[] 数组名称 = { 初始化数据 };
// 动态初始化
int[] arr = new int[]{1, 2, 3};
// 静态初始化
int[] arr = {1, 2, 3};```
3.数组的使用
(1) 获取长度 & 访问元素
- 数组名.length。得到数组长度
- 数组名[i]。获取数组元素
int[] arr = {1, 2, 3};
// 获取数组长度
System.out.println("length: " + arr.length); // 执行结果: 3
// 访问数组中的元素
System.out.println(arr[1]); // 执行结果: 2
System.out.println(arr[0]); // 执行结果: 1
arr[2] = 100; System.out.println(arr[2]); // 执行结果: 100
(2) 下标越界
- 下标访问操作不能超出有效范围 [0, length - 1] , 如果超出有效范围, 会出现下标越界异常
int[] arr = {1, 2, 3};
System.out.println(arr[100]);
// 执行结果 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100 at Test.main(Test.java:4)
(3) 遍历数组
- for循环遍历数组
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]); }
// 执行结果 123
- for-each(增强for循环)遍历数组
int[] arr = {1, 2, 3}; for (int x : arr) {
System.out.println(x);
}
// 执行结果 123
- Arrays.toString( 数组名),将数组一字符串形式输出。
int[] array4={1,2,3,4,5,6,7,8,9,10};
System.out.println(Arrays.toString(array4));
二、数组作为方法的参数
1. 方法打印数组
- int[] a 是函数的形参, int[] arr 是函数实参.
public static void main(String[] args) {
int[] array6={1,2,3,4,5,6,7,8,9,10};
printarray(array6);
}
public static void printarray(int[] arr6){
for (int i:arr6) {
System.out.print(i);
}
}
2. 理解引用
(1)
- 我们知道方法中的形参实际上对实参的复制,即按值传参。
- Java中没有指针的概念,但是也可以按址传参,又叫按引用传参。
- 在c语言中数组是首元素的地址名,所以Java也可通过数组来按址传参。
(2)改变对象,可理解成改变了地址,所以此时形参的值改变,不会使实参的值改变。
public static void main(String[] args) {
int[] array7={1,2,3,};
System.out.println(Arrays.toString(array7));
func1(array7);
System.out.println(Arrays.toString(array7));
}
public static void func1(int[] array7) {
array7= new int[]{4, 5, 6};
}
//执行结果:
[1,2,3]
[1,2,3]
- 以上代码实际上只引用了实参的对象,故只打印[1,2,3]
- 如图:
- (3)改变值,不改变对象
public static void main(String[] args) {
int[] array7={1,2,3,};
System.out.println(Arrays.toString(array7));
func2(array7);
System.out.println(Arrays.toString(array7));
}
public static void func2(int[] array7) {
array7[2]=66;
}
//执行结果:
[1,2,3]
[1,2,66]
- 以上代码,形参和实参指向同一个对象地址,所以可以直接在对象中改变值。
- 如图所示:
3 .null
- null 在 Java 中表示 “空引用” , 也就是一个无效的引用
int[] arr = null; System.out.println(arr[0]);
// 执行结果
Exception in thread "main" java.lang.NullPointerException at Test.main(Test.java:6)
- null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操
作. 一旦尝试读写, 就会抛出 NullPointerException
三、 数组作为方法的返回值
public static void main(String[] args) {
int[] array2={1,2,3};
int[] ret=transform(array2);
printArray(ret);
}
public static void printArray(int[] array){
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
public static int[] transform(int[] array2){
int[] ret=new int[array2.length];
for (int i = 0; i < array2.length; i++) {
ret[i]=2*array2[i];
}
return ret;
}