概念:

首先先来说一说这个一维数组元素输出以及遍历的问题:

//定义了一个长度为3的一维数组
int[] arr = {20,30,40};
//如何取出一维数组中的元素,相信大家并不陌生
System.out.println(arr[0]);//取出索引为0的第一个元素
//如何取出每一个元素,则需要遍历
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}
//或者采用增强for的遍历方法
//语法:for (容器中元素的类型 元素的名称:容器名) {
    System.out.println("元素的名称");
}
for(int num:arr) {
    System.out.println(num);
}

了解了一维数组的元素遍历,下面来讲讲二维数组的这类问题,首先看一下二维数组的语法。
二维数组中的元素其实就是由多个一维数组构成的数组。比如我定义了一个长度为三的二维数组,一维数组的长度由每一个一维数组元素决定。当我们在定义二维数组的时候,一维数组从索引0开始存储在二维数组的空间当中;
注意:数组这块索引越界的问题 ArrayIndexOutOfBoundsException 下标越界 以下三个输出语句都是错误的 下标越界
我们所说的数组长度其实是数组中最后一个元素加1

//该二位数组长度为三,但是每一个一维数组的长度是3,4,5
int[][] arr = {{10,20,30},{9,8,7,6},{45,36,12,0,1}};
System.out.println(arr.length);//输出二维数组的长度 结果是 3
//下面逐个输出一维数组的长度
System.out.println(arr[0].length);//索引为0的一维数组的长度是3
System.out.println(arr[1].length);//索引为1的一维数组的长度是4
System.out.println(arr[2].length);//索引为2的一维数组的长度是5
//如果我们要输出一维数组中每一个元素
System.out.println(arr[0]);**//[I@1b6d3586  打印的是地址值 因为前面我们说一维数组是从索引为0开始存储在二维数组当中的,索引当你输出索为0的时候,其实输出的是首地址 通过C语言我们知道数组名称是首地址也就是指针**
System.out.println(arr[0][1]);//可以输出来的是索引为0的一维数组的第一个元素
//下面再看一下怎么输出每个一维数组的元素,方法双层循环
//外层循环就是前面说的二维数组存储一维数组的方式
for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {***//为什么是 j < arr[i].length 因为是一维数组的长度***
        System.out.println(arr[i][j]);
    }
}