JAVA基础(七)之数组
----------------数组-------------
一维数组
第一种格式:
数据类型[] 数组名 = new 数据类型[元素个数或数组长度];
int[] x = new int[100];
//定义数组 int[] arr=new int[5]; arr[0]=1; arr[1]=100; arr[2]=50; System.out.println(arr);
可以把一维数组想象成一栋楼房
在未赋值时用0来填满整个楼。
0x001代表地址,
数组下标代表门牌号。
0x001地址赋给arr.
进行赋值
arr[0]=1; arr[1]=100; arr[2]=50;
arr[0]=1;表示 地址为0x001的楼 将门牌号是下标为0 给1这个住户。以此类推。
没有住户的则用0来填充
所以 System.out.println(arr);打印的只是地址
输入不存在的数组,报错,
不定义的数组,用0补齐,一次只能一个数组
第二格式:
静态初始化:定义几个变量长度是几个
1、类型[] 数组名 = new 类型[]{元素,元素,……};
2、类型[] 数组名 = {元素,元素,元素,……};
double[] arr =new double[]{1.1,2.5,6.3};
String[] arr={"你好","悟空","哪吒"};
String[] arr={"你好","悟空","哪吒"}; for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); }
求最大值:
求数组最大值.默认让第一个值当最大值 ,不停的与arr[0]进行对比
//求最大值 int[] arr={80,6,1,50,22,11}; int max=arr[0]; for(int i=0;i<arr.length;i++){ if(arr[i]>max){ max=arr[i]; } } System.out.println(max);
二维数组:
1、定义二维数组 外面是二维数组new装的是二维数组的容器,arr是地址集合
第一个格式
int[][] arr=new int[2][3];
int[2][3]二维数组arr 中包含2个长度为3的一维数组。
可以把二维数组想象成二栋楼房
在未赋值时用0来填满整个楼。
0x001代表第一栋地址单元,0x002代表第二栋地址单元,
0x001单元,0x002单元地址为名为0x003的小区
数组下标代表门牌号。
arr[0][0]=21;
可以读为0x003 的小区 第0x001单元的第一层住户为21
System.out.println(arr[0]);
打印的是二维数组中的第一个一维数组arr[0]的地址
1.定义二维数组
/* 定义数组*/ int[][] arr=new int[2][3]; arr[0][0]=21; arr[0][1]=22; arr[1][1]=23; System.out.println(arr[0]);//打印为地址--[I@15db9742 System.out.println(arr);
整个二维数组地址
2、第二种定义方式
int[][] arr = new int[2][];
int arr[][] =new int[2][]; int [] a1={1,2,3};//a1存储的地址 int [] a2={4,5,6}; //建立关系 arr[0]=a1;//偷梁换柱之术,将定义的a1数组赋值到arr[0] arr[1]=a2; System.out.println(arr[0][0]); //注意需要将定义的数组值赋值
3、第三种
int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
int [][] arr={{1,2},{2,3,4},{5}}; //双层循环遍历 for(int i=0;i<arr.length;i++){ for(int j=0;j<arr[i].length;j++){ System.out.print(arr[i][j]+" "); } System.out.println(); }
数组越界异常ArrayIndexOutOfBoundsException数组超出范围
空指针异常NullPointerException,即数组没有值
在Java中 方法的传参 基本数据类型 传的是值 值传递 值在该方法中 改变 属于局部变量改变 当出了该方法 就没有作用了
在Java中 方法的传参 引用数据类型 传的是地址值 当传入 arr数组在内存中的地址值后 堆内存中连续空间中值发生改变可以影响数组整体