Java数组02
3. 内存分析
-
ArrayIndexOutOfBoundsException(数组下标越界了)
-
对于数组定义的图解
-
我的理解:
-
首先再栈之中声明一个数组。
-
堆中是存放数组的元素。
-
在堆中创建数组并给数组中的元素赋值。
-
数组的默认初始化
-
由于数组是引用类型,它的元素就相当于类的实例变量,因此数组一经分配空间,
-
其中的每一个元素也都会按照实例变量同样的方式被隐式初始化。
-
即当数组的长度为10时,你只给第0个赋值了,1-9都为该类型的默认值(如int类型的就为0,String类型的就为null),
-
如果你调取了第10那么就超过数组长度,就会报错了。
4. 数组的四个基本特点
-
当其长度确定以后,数组一旦被创建,它的大小就不可被改变。
-
数组的元素必须是相同类型,不允许出现混合类型。
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型。
-
数组变量属引用类型时,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
-
数组本身就是对象,Java中的对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
5. 数组边界
-
下标的合法区间为[0,length-1],如果越界就会报错,
如:
package com.Ym.array; public class ArrayDemo02 { public static void main(String[] args) { //静态初始化:创建 + 赋值 int[] a = {1,2,3,4,5,6,7,8};//静态数组 System.out.println(a[0]); for (int i = 0; i <= a.length; i++) {//这里等于就取了8就越界了,区间为[0,7]的 System.out.println(a[i]); }//java.lang.ArrayIndexOutOfBoundsException
-
ArrayIndexOutOfBoundsException:数组下标越界异常
6. 小结:
-
数组时相同数据类型(数据类型可以为任意类型)的有序集合
-
数组也是对象。数组元素相当于对象的成员变量
-
数组长度是确定的,不可变的。如果越界就会报**ArrayIndexOutOfBoundsException!**
7. 数组的使用
1. 普通的For循环
package com.Ym.array; public class ArrayTestDemo01 { public static void main(String[] args) { int[] array = {1,2,3,4,5}; for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } } }
通过For循环遍历整个数组后打印出来
2. For-Each循环
public class ArrayTestDemo01 { public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; // for (int i = 0; i < array.length; i++) { // System.out.println(array[i]); //array.for自动生成 //JDK1.5,没有下标就可以遍历数组中的所有元素 for (int array : arrays) { System.out.println(array); } } }
3. 数组作方法入参
package com.Ym.array; public class ArrayTestDemo02 { public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; printArrays(arrays); } public static void printArrays(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } } }
在main方法之外设置一个打印的方法,就可以在main方法中使用。
注意形式为
public static 数据类型 方法名(对象){ 方法代码 }
4. 反转数组
public class ArrayTestDemo03 { public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; int[] reverse = reverse(arrays);//reverse(arrays)+alt+回车自动返回 printArrays(reverse); } public static int[] reverse(int[] arrays){ int[] result = new int[arrays.length]; for (int i = 0, j = result.length-1; i <result.length ; i++, j--) { result[j] = arrays[i]; } return result; } public static void printArrays(int[] arrays){ for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i]); } } }
-
研究了一个下午的反转数组,感觉挺难理解的,不过现在大概能理解个七八层了
-
在main方法外面设置了一个反转数组,通过这些代码来实现反转arrays数组
-
注:
-
return指使整个方法返回,后面不管是循环里还是循环外都不执行了
-
break是用来跳出循环的,但是不会跳出方法
-
alt + 回车 指的是使idea自动创建一个相应的变量,并起名字,能够提高效率
Java数组03
1. 二维数组
-
多维数组可以看成是数组的数组,比如二位数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
-
可以将二位数组当作一个学校,学校中有班级,班级中有学生
-
二维数组
int a[][] = new int[2][5];//定义形式
-
遍历的方法
int[][] array = {{1,2},{2,3},{3,4},{4,5}};//类似于坐标吧 System.out.println(array.length);//4,二维数组的长度 System.out.println(array[0].length);//2,二维数组中第一个元素的长度 System.out.println(array[0]);//[I@1b6d3586,是错误的 System.out.println(array[0][0]);//1:第一个元素(一维数组)里的第一个元素 System.out.println(array[0][1]);//2:第一个元素(一维数组)里的第二个元素 printArray(array[0]); System.out.println("============================="); for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.println(array[i][j]); } } } public static void printArray(int[] arrays){//int[] arrays 是一个数组 for (int i = 0; i < arrays.length; i++) { System.out.println(arrays[i] + " "); } } }
2. Arrays类
-
数组的工具类java.util.Arrays
-
由于数组对象本身并没有什么方法可以让我们对其进行操作,API就提供了一个工具类Arrays来供我们使用
-
基于此就能对数据对象及逆行一些基本的操作
-
具有一下几个常用的功能
-
array.sort =》对数组进行排序
-
System.out.println(Arrays.toString(a))=》将整个数组打印出来,包括中括号
public static void printArray(int[] a){ for (int i = 0; i < a.length; i++) { if (i == 0){ System.out.print("["); } if (i == a.length-1){ System.out.print(a[i] + "]"); }else { System.out.print(a[i]+", "); } } }//这就相当于Arrays.toString(a)
1. Arrays.fill(a,数字)=》对数组填充
Arrays.fill(a,n,m,数字)=》对第n个元素到第m个元素(左开右闭)进行填充
2. Arrays.equals=》比较数组中的元素值是否相等
3. 通过binarySearch方法能对排序好的数组进行二分查找法操作
2022.9.17 星期六
加班的一天,这个星期过的真的十分的充实,充实到我都有点累了,在健身房疯狂运动的一周,体重也降到了90kg以下了,进度挺不错,希望我姐婚礼的时候能到85kg,到过年的时候到80kg以下,这是我的小flag。
明天是满课,所以不一定有时间学习java,但是要在上课的时候看看文献了,多搞懂一点就能在组会上多讲一点东西,加油加油。
希望番禺疫情能够缓解一下,下周三我就去学车去,希望到时老师能够不介意我整天不在课题组。我下午就回来哈哈!
来到华工的第二个星期了,感觉时间过的真快,希望能够在这里学有所成把。