一、数组概述、一维数组的初始化、数组遍历
package com.atguigu.java; /* * 一、数组的概述 * 1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名, * 并通过编号的方式对这些数据进行统一管理。 * * 2.数组相关的概念: * >数组名 * >元素 * >角标、下标、索引 * >数组的长度:元素的个数 * * 3.数组的特点: * 1)数组是有序排列的 * 2)数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型 * 3)创建数组对象会在内存中开辟一整块连续的空间 * 4)数组的长度一旦确定,就不能修改。 * * 4. 数组的分类: * ① 按照维数:一维数组、二维数组、。。。 * ② 按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组 * * 5. 一维数组的使用 * ① 一维数组的声明和初始化 * ② 如何调用数组的指定位置的元素 * ③ 如何获取数组的长度 * ④ 如何遍历数组 * ⑤ 数组元素的默认初始化值 :见ArrayTest1.java * ⑥ 数组的内存解析 :见ArrayTest1.java */ public class ArrayTest { public static void main(String[] args) { //1. 一维数组的声明和初始化 int num;//声明 num = 10;//初始化 int id = 1001;//声明 + 初始化 int[] ids;//声明 //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行 ids = new int[]{1001,1002,1003,1004}; //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行 String[] names = new String[5]; //错误的写法: // int[] arr1 = new int[]; // int[5] arr2 = new int[5]; // int[] arr3 = new int[3]{1,2,3}; //也是正确的写法: int[] arr4 = {1,2,3,4,5};//类型推断 //总结:数组一旦初始化完成,其长度就确定了。 //2.如何调用数组的指定位置的元素:通过角标的方式调用。 //数组的角标(或索引)从0开始的,到数组的长度-1结束。 names[0] = "王铭"; names[1] = "王赫"; names[2] = "张学良"; names[3] = "孙居龙"; names[4] = "王宏志";//charAt(0) // names[5] = "周扬"; //3.如何获取数组的长度。 //属性:length System.out.println(names.length);//5 System.out.println(ids.length); //4.如何遍历数组 /*System.out.println(names[0]); System.out.println(names[1]); System.out.println(names[2]); System.out.println(names[3]); System.out.println(names[4]);*/ for(int i = 0;i < names.length;i++){ System.out.println(names[i]); } } }
二、数组元素的默认初始化值、数组的内存解析
package com.atguigu.java; /* * ⑤ 数组元素的默认初始化值 * > 数组元素是整型:0 * > 数组元素是浮点型:0.0 * > 数组元素是char型:0或'u0000',而非'0' * > 数组元素是boolean型:false * * > 数组元素是引用数据类型:null * * ⑥ 数组的内存解析 */ public class ArrayTest1 { public static void main(String[] args) { //5.数组元素的默认初始化值 int[] arr = new int[4]; for(int i = 0;i < arr.length;i++){ System.out.println(arr[i]); } System.out.println("**********"); short[] arr1 = new short[4]; for(int i = 0;i < arr1.length;i++){ System.out.println(arr1[i]); } System.out.println("**********"); float[] arr2 = new float[5]; for(int i = 0;i < arr2.length;i++){ System.out.println(arr2[i]); } System.out.println("**********"); char[] arr3 = new char[4]; for(int i = 0;i < arr3.length;i++){ System.out.println("----" + arr3[i] + "****"); } if(arr3[0] == 0){ System.out.println("你好!"); } System.out.println("**********"); boolean[] arr4 = new boolean[5]; System.out.println(arr4[0]); System.out.println("**********"); String[] arr5 = new String[5]; System.out.println(arr5[0]); if(arr5[0] == null){ System.out.println("北京天气不错!"); } } }
三、二维数组
package com.atguigu.java; /* * 二维数组的使用 * * 1.理解: * 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。 * 其实,从数组底层的运行机制来看,其实没有多维数组。 * * 2. 二维数组的使用: * ① 二维数组的声明和初始化 * ② 如何调用数组的指定位置的元素 * ③ 如何获取数组的长度 * ④ 如何遍历数组 * ⑤ 数组元素的默认初始化值 :见 ArrayTest3.java * ⑥ 数组的内存解析 :见 ArrayTest3.java * * */ public class ArrayTest2 { public static void main(String[] args) { //1.二维数组的声明和初始化 int[] arr = new int[]{1,2,3};//一维数组 //静态初始化 int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}}; //动态初始化1 String[][] arr2 = new String[3][2]; //动态初始化2 String[][] arr3 = new String[3][]; //错误的情况 // String[][] arr4 = new String[][4]; // String[4][3] arr5 = new String[][]; // int[][] arr6 = new int[4][3]{{1,2,3},{4,5},{6,7,8}}; //也是正确的写法: int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}}; int[] arr5[] = {{1,2,3},{4,5},{6,7,8}}; //2.如何调用数组的指定位置的元素 System.out.println(arr1[0][1]);//2 System.out.println(arr2[1][1]);//null arr3[1] = new String[4]; System.out.println(arr3[1][0]); //3.获取数组的长度 System.out.println(arr4.length);//3 System.out.println(arr4[0].length);//3 System.out.println(arr4[1].length);//4 //4.如何遍历二维数组 for(int i = 0;i < arr4.length;i++){ for(int j = 0;j < arr4[i].length;j++){ System.out.print(arr4[i][j] + " "); } System.out.println(); } } }
package com.atguigu.java; /* * 二维数组的使用: * 规定:二维数组分为外层数组的元素,内层数组的元素 * int[][] arr = new int[4][3]; * 外层元素:arr[0],arr[1]等 * 内层元素:arr[0][0],arr[1][2]等 * * ⑤ 数组元素的默认初始化值 * 针对于初始化方式一:比如:int[][] arr = new int[4][3]; * 外层元素的初始化值为:地址值 * 内层元素的初始化值为:与一维数组初始化情况相同 * * 针对于初始化方式二:比如:int[][] arr = new int[4][]; * 外层元素的初始化值为:null * 内层元素的初始化值为:不能调用,否则报错。 * * ⑥ 数组的内存解析 * */ public class ArrayTest3 { public static void main(String[] args) { int[][] arr = new int[4][3]; System.out.println(arr[0]);//[I@15db9742:一个[表示一维数组,I表示int型,@后表示地址值 System.out.println(arr[0][0]);//0 // System.out.println(arr);//[[I@6d06d69c System.out.println("*****************"); float[][] arr1 = new float[4][3]; System.out.println(arr1[0]);//地址值 System.out.println(arr1[0][0]);//0.0 System.out.println("*****************"); String[][] arr2 = new String[4][2]; System.out.println(arr2[1]);//地址值 System.out.println(arr2[1][1]);//null System.out.println("*****************"); double[][] arr3 = new double[4][]; System.out.println(arr3[1]);//null // System.out.println(arr3[1][0]);//报错 } }