Java数组

    科技2025-07-25  5

    Java数组

    数组的定义和访问

    数组的概念:数组就是存储数据长度固定的容器,保证每个数据的数据类型要一致。

    数组的定义:共三种方式

    方式一 数组存储的数据类型[]数组名字 = new 数组存储的数据类型[长度];

    举例:

    int[] arr = new int[3] 方式二 数组类型[]数组名 = new 数据类型[]{元素1,元素2,...};

    举例:

    int[] arr = new int[]{1,2,3,4,5} 方式三 数据类型[]数组名 = {元素1,元素2,元素3,...};

    举例:

    int[] arr ={1,2,3,4,5}

    数组的访问

    索引:从0开始数组的长度属性:可获取数组的长度,语句为数组名.length,数组的最大索引值为length-1 package Array; public class Demo01 { public static void main(String[] args) { //定义存储int类型数组,赋值元素1,2,3,4,5 int arr[] = new int[]{1,2,3,4,5}; //为0索引元素赋值为6 arr[0] = 6; //获取 int i = arr[0]; //输出 System.out.println(i); System.out.println(arr[0]); } }

    数组原理内存图

    一个数组内存图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTQMRcOq-1602130444318)(C:\Users\2han9h0uq1an_\Desktop\黑马Java\01.Java基础语法\05.【数组】\03_参考\02-只有一个数组的内存图.png)]

    两个数组内存图

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-srYtiWD2-1602130444320)(C:\Users\2han9h0uq1an_\Desktop\黑马Java\01.Java基础语法\05.【数组】\03_参考\03-有两个独立数组的内存图.png)]

    两个变量指向一个数组

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pg2zVoDO-1602130444321)(C:\Users\2han9h0uq1an_\Desktop\黑马Java\01.Java基础语法\05.【数组】\03_参考\04-两个引用指向同一个数组的内存图.png)]

    数组的常见操作

    数组越界异常:请求访问的数组下标超过length-1

    数组空指针异常:数组的内存地址不被arr保存

    数组遍历:将数组的每个元素分别获取出来

    package Array; public class Demo02 { public static void main(String[] args) { int arr[] = {1,2,3,4,5}; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }

    数组获取最大值元素:从数组中的所有元素中找到最大值

    package Array; public class Demo03 { public static void main(String[] args) { int[] arr = {5,15,2000,10000,50,2777}; int max = arr[0]; for (int i = 0; i < arr.length; i++) { //如果元素大于max if(arr[i]>max){ max = arr[i];//max记录此时的最大值 } } System.out.println("最大值为:"+max); } }

    数组翻转:数组中的元素颠倒顺序

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wdxFhNCY-1602130444325)(C:\Users\2han9h0uq1an_\Desktop\黑马Java\01.Java基础语法\05.【数组】\03_参考\07-数组元素反转的思路.png)]

    package Array; public class Demo04 { public static void main(String[] args) { int[] arr = {1,2,3,4,5}; /* 循环中定义变量min=0最小索引 max=arr.length-1最大索引 max--,min++ */ for(int min = 0,max =arr.length-1;min <= max;min++,max--){ //利用第三方变量完成交换 int temp = arr[min]; arr[min] = arr[max]; arr[max] = temp; } //反转后,遍历数组 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }

    数组作为方法返回值

    数组作为方法的返回值,返回的是数组的内存地址 package Array; public class Demo05 { public static void main(String[] args) { //调用方法,接收数组的返回值 //接收到的是数组的内存地址 int[] arr = getArray(); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } public static int[] getArray() { int[] arr = {1, 3, 5, 7, 9}; //返回数组的地址,返回到调用者 return arr; } }

    方法的参数类型区别

    分析下列程序代码,计算输出结果

    package Array; public class Demo06 { public static void main(String[] args) { int a = 1; int b = 2; System.out.println(a); System.out.println(b); change(a,b); System.out.println(a); System.out.println(b); } public static void change(int a,int b){ a = a + b; b = b + a; } }

    输出为:1,2,1,2

    这是一个基本数据类型int整型的传参,输出变量a的值发现a仍然是1,并没有发生任何改变;虽然在调用change函数的时候,执行了a=a+b,但是a的值确实没有改变

    package Array; public class Demo07 { public static void main(String[] args) { int[] arr = {1,3,5}; System.out.println(arr[0]); change(arr); System.out.println(arr[0]); } public static void change(int[] arr){ arr[0]=200; } }

    输出为:1,200

    这是一个引用数据类型传参,在函数体内对arr[0]进行了重新赋值,在调用该函数之后重新输出数组,发现数组内的值也发生了改变,这跟基本数据类型的结果是有区别的

    当基本数据类型作为传递参数的时候,传的就是参数的具体值,这里变量的值确实发生了改变,它是存储在栈里边的,出了函数体就销毁了;变量a跟形参变量a是两个完全不同的变量;而当引用数据类型传递参数的时候,传递的是对象的首地址,也就是又新建了一个栈内的对象,指向堆内的一块内存,形参变量和实参变量共享同一块堆区

    Processed: 0.012, SQL: 8