一、二位数组是一个特殊的一维数组,特殊在这个一维数组中每个元素都是一维数组
相当于一维数组存储一维数组(遍历二维数组可以通过debug模式很直观的展示)
通过以下堆区分布证明:
int[][] data = new int[2][3];
二、语法:
数据类型[][]:第一个[]代表行,第二个[]代表列
三、举例
1、基本类型:动态二位数组声明
package com.JavaStudy.studyArray0601; /** * @Author wufq * @Date 2020/6/2 16:07 * 二维数组:相当于一维数组存储一维数组 */ public class ArrayTest05 { public static void main(String[] args){ //动态初始化 //声明二位数组 int[][] data = new int[2][3]; //前面的一维数组长度为2,后面的一维数组长度为3,即:int[n][m],就是前面的一维数组长度为n,后面的一维数组长度为m //对二维数组赋值 data[0][0] =1; data[0][1] =2; data[0][2] =3; data[1][0] =4; data[1][1] =5; data[1][2] =6; //遍历数组 for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ System.out.print(data[i][j]+" "); } System.out.println(); System.out.println("一维数组元素里面有几个一维数组:"+data[i].length); } //上面这个特殊的一维数组有多少个一维数组 System.out.println("有几个一维数组:"+data.length); } }
=====执行结果=====
1 2 3
一维数组元素里面有几个一维数组:3
4 5 6
一维数组元素里面有几个一维数组:3
有几个一维数组:2
2、基本类型:静态二位数组声明
package com.JavaStudy.studyArray0601; /** * @Author wufq * @Date 2020/6/3 10:25 */ public class ArrayTest06 { public static void main(String[] args){ int[][] data = {{1,2,3},{4,5,6}}; //相当于一个一维数组存储两个一维数组,而且第一个一维数组有三个元素,第二个一维数组有三个元素 for(int i=0;i<data.length;i++){ for(int j=0;j<data[i].length;j++){ System.out.print(data[i][j]+" "); } System.out.println(); } } }
3、引用类型:动态/静态二维数组的声明
package com.JavaStudy.studyArray0603; /** * @Author wufq * @Date 2020/6/3 10:58 */ public class Students { private int age; private String name; public void setAge(int age){ this.age = age; } public int getAge(){ return age; } public void setName(String name){ this.name = name; } public String getName(){ return name; } public Students(){} public Students(int age,String name){ this.age = age; this.name = name; } //重写toString方法 public String toString(){ return "Students[age="+age+",name="+name+"]"; } }
package com.JavaStudy.studyArray0603; /** * @Author wufq * @Date 2020/6/3 10:59 */ public class ArrayTest { public void test1(){ //静态初始化一维数组 Students[] stu1 = {new Students(18,"张三"),new Students(19,"李四"),new Students(20,"王五")}; Students[] stu2 = {new Students(22,"花花"),new Students(23,"贝贝"),new Students(24,"成成")}; //动态初始化二维数组 Students[][] students = new Students[2][3]; //把一维数组的stu1赋值给students的第一个元素,把一维数组的stu2赋值给students的第二个元素, students[0] = stu1; students[1]= stu2; printArr(students); } public void test2(){ //静态初始化二维数组 Students[][] students = { {new Students(18,"张1"),new Students(19,"张2")}, {new Students(20,"张3"),new Students(21,"张4")}, {new Students(22,"张5"),new Students(23,"张6")}, }; printArr(students); } public void printArr(Students[][] Arr){ for(int i=0;i<Arr.length;i++){ for(int j=0;j<Arr[i].length;j++){ System.out.println("Arr["+i+"]["+j+"]="+Arr[i][j].toString()); } System.out.println(); } } public static void main(String[] args){ ArrayTest at = new ArrayTest(); at.test1(); System.out.println("----------------"); at.test2(); } }
test1堆区分布图
四、main方法中String[] args数组
需求:要使用改系统必须提供用户名和密码,如果不提供则不能使用该软件
package com.JavaStudy.studyArray0603; /** * @Author wufq * @Date 2020/6/3 15:10 * 通过登录名和密码来理解main方法中String[] args数组 */ public class ArrayTest02 extends ArgsException{ public static void main(String[] args) throws ArgsException{ System.out.println(args.length); if(args.length!=2){ throw new ArgsException("java ArrayTest02 username password Error"); } //获取用户名 String username = args[0]; //获取密码 String passwd = args[1]; if(username.equals("admin")&&passwd.equals("123456")){ System.out.println("登录成功,欢迎"+username+"回来!"); }else{ System.out.println("登录失败"+username+"不存在或者密码错误"); } } } class ArgsException extends Exception{ ArgsException(){} ArgsException(String msg){ super(msg); } }